本题其实是一道比较简单的题目,可一看到题目时,确实懵了一下,甲乙丙丁的跳过次数要依次输出的,而不仅仅是输出总的跳过次数。
- 本题中我使用了数组,其实不使用数组,直接用for(i=1;i<=n;i++)会更好。需要注意:当使用数组时应该确定数组大小,而不能以a[n]这种形式来 声明,因为在本题中起初输入的n是会变化的。
- 题目中明确说明不计入被跳过的数,所以,最终统计的数是不包含被跳过的数的,而我们起初给了n一个确定的值,也就是我们确定的报够n个数才能结束游戏。所以,每跳过一个数,我们应该使n+1。
- 通过观察甲乙丙丁可能报的数的规律:通过每个数对4取余结果来确定。
- 含有数字7(个位、十位、百位),7的倍数。
- 最后一定要注意输出的格式,输出四行,每行一个数。
/*四个人从1开始轮流报数,含有数字7或者是7的倍数就直接跳过
输入: n-----报了n个数后游戏结束
输出: 共四行,每行一个正整数,依次表示甲乙丙丁跳过的次数
*/
#include<stdio.h>
int a[10001];
int main()
{
int n,i;
int j=0,y=0,b=0,d=0;
scanf("%d",&n);
//int a[n]; 数组大小不应该设为n了,n是改变的。
for( i=0;i<n;i++)
{
a[i]=i+1;
if((a[i]%4==1)&&(a[i]%7==0||a[i]%10==7||a[i]/10%10==7||a[i]/100==7))
{
j++;
n++; //不计入未被跳过的数,所以,事实上出现的数的个
//数应该是大于n的 ,每跳过一个数,应该补一个数。
}
if((a[i]%4==2)&&(a[i]%7==0||a[i]%10==7||a[i]/10%10==7||a[i]/100==7))
{
y++;
n++;
}
if((a[i]%4==3)&&(a[i]%7==0||a[i]%10==7||a[i]/10%10==7||a[i]/100==7))
{
b++;
n++;
}
if((a[i]%4==0)&&(a[i]%7==0||a[i]%10==7||a[i]/10%10==7||a[i]/100==7))
{
d++;
n++;
}
}
printf("%d\n%d\n%d\n%d",j,y,b,d); //注意输出格式
return 0;
}