这是《C语言入门实战》系列的第10篇。
上一篇:C语言入门实战(9):完数判断
题目
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请问该阶梯至少有多少阶?请编程解决该问题。
要求
本程序无需输入,结果只输出一个整数即可。
参考代码
#include <stdio.h>
#include <stdlib.h>
/**
* 根据题意,即是求最小的正整数n,满足
* n%2 = 1
* n%3 = 2
* n%5 = 4
* n%6 = 5
* n%7 = 0
*/
int main(int argc, char *argv[]) {
int i,j;
//定义一个整型数组
int a[4] = {2,3,5,6};
for(i=1;;i++) {
//从7的倍数开始找
int n = i*7;
int find = 1;
for(j=0;j<4;j++) {
if(n%a[j] != a[j]-1) {
find = 0;
break;
}
}
if(find == 1) {
printf("%d", n);//119
break;
}
}
return 0;
}
代码复盘
%
是取模运算符,a%b
即是求a/b
的余数。
从7的倍数开始找(1倍,2倍,…),找到符合条件的第一个数打印答案,break
跳出。
头文件stdio.h
中声明的scanf()
和printf()
是标准库中用于处理标准输入和输出的库函数。