CCF 2019-12-1-报数

CCF 2019-12-1-报数

本题其实是一道比较简单的题目,可一看到题目时,确实懵了一下,甲乙丙丁的跳过次数要依次输出的,而不仅仅是输出总的跳过次数。

  • 本题中我使用了数组,其实不使用数组,直接用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;	
 } 

上一篇:中国全脂奶粉市场需求现状调研与竞争力分析报告2022-2027年


下一篇:前端入门笔记之零散学习