06.17 C語言愛因斯坦的數學題

C語言愛因斯坦的數學題

很多學習者們在學完循環判斷後,已經可以用自己所學習到的知識一些小東西,寫一些代碼來解決實際的問題了。而也有大部分學習者並不能夠學以致用。對一些經典簡單的題目也無法下手,沒有自己的編程思路的雛形。

下面會給大家一個題目,讓大家動手操作起來。踏出培養自己編程思路的第一步。

問題描述

愛因斯坦出了一道這樣的數學題:有一條長階梯,若每步跨2階,則最後剩1階,若每步跨3階,則最後剩2階,若每步跨5階,則最後剩4階,若每步跨6階則最後剩5階。只有每次跨7階,最後才正好一階不剩。請問在 1~N 內,有多少個數能滿足?

問題分析

用變量x表示階梯數,則x 應滿足:

◎若每步跨2階,則最後剩1階 -- x%2=1;

◎若每步跨3階,則最後剩2階 -- x%3=2;

◎若每步跨5階,則最後剩4階 -- x%5=4;

◎若每步跨6階,則最後剩5階 -- x%6=5;

◎每次跨7階,最後一階不剩 -- x%7=0。

因此,階梯數應該同時滿足上面的所有條件。

算法設計

該問題要求輸入N值,求解出在的範圍內存在多少個滿足要求的階梯數。在算法設計中,使用while循環以允許重複讀入多個N值。聲明一個變量假設為flag,利用語句 while(flag){循環體} 來進行控制,當flag的值為1時可以接著輸入,若為0則結束循環。

對每一次讀入的N值,都要判斷在 1~N 的範圍內存在的滿足要求的階梯數個數。判斷時可採用for循環,循環變量設為i,由題意,i的初值從7開始取即可,for循環的循環條件為 i

下面是完整的代碼:

#include<stdio.h>
int main()
{
long n, sum, i;
int flag=1;
while(flag)
{
printf("輸入N:");
scanf("%ld", &n);
printf("在1-%ld之間的階梯數為:\\n", n);

sum=0;
for( i=7; i<=n; i++ )
if( i%7 == 0 )
if( i%6 == 5 )
if( i%5 == 4 )
if( i%3 == 2 )
{
sum++;
printf("%ld\\n", i);
}
printf("在1-%ld之間,有%ld個數可以滿足愛因斯坦對階梯的要求。\\n", n, sum);
printf("繼續請輸入1,否則輸入0:\\n");
scanf("%d", &flag);

}
return 0;
}
/<stdio.h>

運行結果:

輸入N:123

在1-123之間的階梯數為:

119

在1-123之間,有1個數可以滿足愛因斯坦對階梯的要求。

繼續請輸入1,否則輸入0:

1

輸入N:1234

在1-1234之間的階梯數為:

119

329

539

749

959

1169

在1-1234之間,有6個數可以滿足愛因斯坦對階梯的要求。

繼續請輸入1,否則輸入0:

以上就是本題目的所有了,大家在操作的時候,不要記住去看原碼,先自己是不是可以做的出來,想想自己會用什麼樣的思路來解決這個問。

編程思路的培養對於學習者來說是很重要的,有了編程思路,你就會試著按照自己的想法去做些什麼,假如有相關知識點沒掌握,那種興趣的動力也會催促著你去快點掌握,然後繼續實踐你的想法。會給你學習帶來極大的興趣,以及學習的動力。我提供的這個題目也只是一此簡單的練習而已。所以希望大家在往後學習的過程中,多敲代碼,多去實踐自己所學的知識和想法。

如果大家覺得我的文章還可以,可以關注,轉發,收藏,評論。

然後大家有想學習c\\c++,或者在學習c\\c++的同學們,可以私聊發送“C語言” 我會提供給你們一些幫助。另外祝大家端午節快樂


分享到:


相關文章: