ccf认证试题——201912-1【报数】

本文探讨了一个有趣的计数问题,即在数数过程中跳过所有包含数字7或能被7整除的数字,并记录跳过次数。通过使用C++实现的算法,展示了如何有效地解决这一问题,同时提供了完整的代码示例。

【原文出处,可以提交代码打分】http://118.190.20.162/view.page?gpid=T100

感觉题目水平还是挺高的,蛮有意思的一个题,考察综合程度比较好。

 

解答比较容易想到:

1、先构建一个函数算那个7的条件:模运算、降权取低位看是不是7。

2、然后记录不跳过的次数和给跳过的人记录跳过的次数。

有趣的是这个用for循环做的时候,可以很好的利用结束条件,看代码:

#include<bits/stdc++.h>
using namespace std;

//丁甲乙丙跳过次数 
int tg[4]={0};
//数的个数,当前数,一共数了多少个数 
int n,cur=1,cnt=1;


bool Seven(int n){
	if(n%7==0){			//被7整除 
		return true;
	}
	while(n>0){			//带7 
		if(n%10==7){
			return true;
		}
		n/=10;
	}
	return false;
}


int main(){
	cin>>n;
	for(cur=1;cnt<=n;cur++){
		if(Seven(cur)){			//跳过 
			tg[cur%4]++;
		}else{
			cnt++;				//不跳过 
		}
	}
	for(int i=1;i<4;i++){
		cout<<tg[i]<<endl;
	}
	cout<<tg[0]<<endl;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清晨曦月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值