C语言入门实战(10):取模问题


题目

爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上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()是标准库中用于处理标准输入和输出的库函数。

经验分享 程序员 微信小程序 职场和发展