1.题目描述:爱因斯坦出了一道这样的数学题:有一条长阶,每跨两阶刚好剩一阶,每步跨三阶刚好差两阶,每步跨五阶刚好剩4阶,每步跨6阶刚好剩五阶。只有每次跨七阶时才正好一阶不剩。请问在1~N内,有多少个数可以满足。
2.题目分析:这个题目几个条件可以看作是一个除N余N-1的问题,而最后一句每次跨七阶时刚好一阶不剩证明这个数是七的倍数,而问1~N内有多少个这个数可以对1~N进行遍历符合条件则数目+1;
3.算法设计:首先编辑一个函数,这个函数有一个形参x,用来判断0-x间符合题目条件数字的个数,这个函数中用循环语句对数字进行遍历,由于符合条件的数是七的倍数,所以每次循环结束要加7,以此来减少遍历次数。使用while循环,循环条件中输入N,当N=0时跳出循环;
4.源代码:
#include<iostream>
using namespace std;
void a (int N)
{
int gs = 0;
for (int i = 7; i < N; i += 7)
{
if (i % 2 == 1 && i % 3 == 2 && i % 5 == 4 && i % 6 == 5)
{
cout << i << endl; gs++;
}
}
cout << gs<<endl;
}
int main()
{
int N;
while (cin >> N &&N!=0)//注意不加N!=0时结束条件是输入为“\0”,while循环结束条件是为假,自己输入则“\0”为假;不自己输入则=0为假;
{
a(N);
}
return 0;
}