专栏文章

题解:P13185 [GCJ 2016 Qualification] Counting Sheep

P13185题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miox3qe4
此快照首次捕获于
2025/12/03 02:34
3 个月前
此快照最后确认于
2025/12/03 02:34
3 个月前
查看原文

题目大意:

枚举 NN 的倍数, 直到全部十个数字都出现过为止。

思路:

显然,只有当 NN00 时,输出 INSOMNIA
定义函数 digit\operatorname{digit} 将每个 NN 的倍数进行拆分,并存入数组。
CPP
bool num[10];
void digit(long long x){
	while(x>0){
		num[x%10]=true;
		x/=10;
	}
}
定义函数 judge\operatorname{judge} 进行判断。
CPP
bool num[10];
bool judge(){
	for(int i=0;i<10;i++){
		if(!num[i]){
			return false;
		}
	}
	return true;
}

代码:

CPP
#include <bits/stdc++.h>
using namespace std;
bool num[10];
bool judge(){ // 判断是否全部出现。
	for(int i=0;i<10;i++){
		if(!num[i]){
			return false;
		}
	}
	return true;
}

void digit(long long x){ // 拆分数字。
	while(x>0){
		num[x%10]=true;
		x/=10;
	}
}

int main(){
	int T;
	scanf("%d",&T);
	for(int i=1;i<=T;i++){
		memset(num,0,sizeof(num)); // 清空。
		int n;
		long long cnt;
		scanf("%d",&n);
		if(n==0){ // 特判。
			printf("Case #%d: INSOMNIA\n",i);
			continue;
		}
		cnt=n;
        for(int j=1;;j++){
        	digit(cnt*j);
        	if(judge()){
        		printf("Case #%d: %d\n",i,cnt*j);
        		break;
			}
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...