卡片题目:
分析:
对于此题我们需要找到那个数字的卡片最先用完,我们可以创建几个数组,给每一个数组赋值为2021表示卡片的数量,然后通过求余和取模的方法,将个位的数字一个个分离出来,并让相应的数字卡片数量减一,值得注意的是:我们是先判断,在减少卡片数量,所以当发现卡片数量为0时,实则是上一个判断的数字。
测试代码:
#include<iostream>
#define ll long long
using namespace std;
int a[11];
int main() {
for (int i = 0; i < 10; i++)
a[i] = 2021;
int cnt = 1;
while (1) {
int x = cnt;
while (x) {
if (a[x % 10] == 0) {
cout << cnt - 1 << endl;
return 0;
}
a[x % 10]--;
x /= 10;
}
cnt++;
}
}
运行结果:
巧妙方法:
当我们自习观看的时候,会发现我们的卡片数量1始终都是最先完结的,所以可以直接对为1的卡片进行处理输出的答案依旧是3181:
#include<stdio.h>
int main() {
int count = 0, i;
for(i = 0; i < 10000; i++) {
if(i % 10 == 1) {
count++;
}
if((i / 10) % 10 == 1) {
count++;
}
if((i / 100) % 10 == 1) {
count++;
}
if((i / 1000) % 10 == 1) {
count++;
}
if(i / 10000 == 1) {
count++;
}
if(count == 2021) {
break;
}
}
printf("%d", i);
return 0;
}
|