1524 残缺的数字
时间限制: 1 s
空间限制: 1000 KB
题目等级 : 黄金 Gold
查看运行结果
题目描述 Description
可怜的小小在数数字……。本来有1..n这n个数,但是她一不小心数没了一个数X。如果这个事情被残酷的Evil Zig 发现,那么这个可怜的小女孩将会……。为了拯救小小我们必须找到那个失踪的数X!现在我们现在只知道 0..9个十个数字在这剩下的N-1个数中分别出现的次数,你必须以次求出N和X。若有多组解,则全部输出,每行一组。
输入描述 Input Description
仅有一行,包含10个数,分别表示0 .. 9在n-1个数字中出现的次数。( 每个数均不大于300 )
输出描述 Output Description
输入所有可能的N和X,每组一行。按从小到大的顺序排序(N为第一关键字,X为第二关键字)。若无解,输出“NO ANSWER”。
样例输入 Sample Input
0 1 1 0 1 1 1 1 1 1
样例输出 Sample Output
9 3
数据范围及提示 Data Size & Hint
分类标签 Tags 点此展开
首先说一下:数据太水
本题,就是一模拟,一人一习惯,貌似我的写的很长了。
放代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int num[10]; int s[10],s1[10]; int main(){ int n,m,l;//暂时储放器 int e=0,d=0,z=0;//计数+标志 for(int i=0;i<=9;i++){ scanf("%d",num+i); if(num[i]>=300){ d=3; } } if(z!=10&&d!=3){ for(int i=1;i<=3000;i++){//大约在数据范围内 m=i;//~~以下开始模拟,具体自己看看 while(i!=0){ l=i%10; s[l]+=1; i/=10; } i=m; for(int j=1;j<=i;j++){ for(int c=0;c<=9;c++){ s1[c]=s[c]; } n=j; while(j!=0){ l=j%10; s[l]-=1; j=j/10; } for(int c=0;c<=9;c++){ if(num[c]==s[c]) e++; else break; } j=n; if(e==10){ printf("%d %d",i,j);d=1;return 0; } e=0; for(int c=0;c<=9;c++){ s[c]=s1[c]; } } m=0; } } else d=0; if(d!=1) printf("NO ANSWER\n"); return 0; }
时间: 2024-10-20 07:44:48