3 solutions
-
1
/* 思路:首先定义一个数组Number,用于存储每个数字有多少个。 一个函数x,用于判断还有剩余数字吗。 注意恰好用完是0,是满足条件的。只有为负数的时候才是不够用的。 for循环遍历每个凑成的数字i,while中用%和/的方式让i的每一位数字-1, 发现Number数组中数字不够用则输出上一个i(因为当前i凑不出)。 */ #include<bits/stdc++.h> using namespace std; int number[10]; bool x() { for (int i = 1; i <= 9; i++) { if (number[i] < 0) return false; } return true; } int main(){ int j; for (int i = 0; i <= 9; i++) number[i] = 2021; for (int i = 1; x(); i++){ j=i; while(j>0){ number[j%10]--; j/=10; if(!x()){ cout<<i-1; break; } } } return 0; }
-
0
#include<iostream> using namespace std; int a[10]; bool find(int n){ while(n){//因为不确定n是多少位只能一位一位的拆分 int N = n%10;//一位一位的拆分拆成0到9十个数 n /= 10;//剩下的数重新赋值 --a[N]; if(a[N]<0) return false; } return true; } int main(){ int num = 0; for(int i=0; i<10; i++){//给0到9十张卡片赋值 a[i] = 2021; } for(int i=1;find(i);i++)//因为从1开始拼凑则直接从1开始遍历 num++; printf("%d\n",num); }
-
0
#include<bits/stdc++.h>
using namespace std;
int a[10];
bool check(int x,int *a){
while(x){ if(a[x%10]<=0)return false;//如果当前数字卡片用完了,直接返回失败 a[x%10]--;//如果当前的卡片没用完,则使用一张并减减 x/=10; } return true;//顺利拼完
}
int main(){
for(int i=0;i<10;i++) a[i]=2021;
for(int i=1;;i++)//只要这个数可以拼出来,就继续拼
if(!check(i,a)){ cout<<i-1;//因为i这个数是false状态也就是说拼不出来,所以输出i-1 break; }
return 0;
}
- 1
Information
- ID
- 1557
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 3
- Tags
- # Submissions
- 154
- Accepted
- 80
- Uploaded By