题目描述
算法设计+题目分析
分析题目:
1、建立一个长度为4的数组,分别统计甲乙丙丁每个人的报数个数;
int num[4]={0};
2、写出跳过函数,跳过的条件是7的倍数和至少有一位是7,返回1;不满足返回0;
3、设置上限为n的循环,对每一个数判断是否跳过,跳过就上限n+1,并且每个人的跳过次数+1;
4、循环至结束,打印。
注意点+记录点
无
代码(100分)
环境
Visual C++6.0
#include <stdio.h>
//using namespace std;
int num[4]={0};
int call(int n){//报数函数
if (n%7==0) return 1;//7的倍数,报数
while (n) {
if (n % 10 == 7) return 1;//有一位为7,报数
n /= 10;
}
return 0;
}
int main()
{
//freopen("C:\\input.txt", "r", stdin);
int n;
scanf("%d", &n);
for (int i=1; i<=n; i++){
if (i%4==1 && call(i)){
n++;//每报一个数后,n的上限+1
num[0]++;//报数的人的次数+1
}
if (i%4==2 && call(i)){
n++;
num[1]++;
}
if (i%4==3 && call(i)){
n++;
num[2]++;
}
if (i%4==0 && call(i)){
n++;
num[3]++;
}
}
for (int j=0; j<3; j++) printf("%d\n", num[j]);
printf("%d", num[3]);
return 0;
}
感谢链接
无