問題描述
愛因斯坦出了一道這樣的數學題:有一條長階梯,若每步跨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); 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 ", i); } printf("在1-%ld之間,有%ld個數可以滿足愛因斯坦對階梯的要求。 ", n, sum); printf("繼續請輸入1,否則輸入0: "); scanf("%d", &flag); } return 0; } 運行結果: 輸入N:123 在1-123之間的階梯數為: 119 在1-123之間,有1個數可以滿足愛因斯坦對階梯的要求。 繼續請輸入1,否則輸入0: 1 輸入N:1234 在1-1234之間的階梯數為: 119 329 539 749
959
1169
在1-1234之間,有6個數可以滿足愛因斯坦對階梯的要求。
閱讀更多 酷叮貓少兒編程 的文章