就是这个判断是否还有卡片的部分出错了
题目如下
for(i=100;zero=0;i++){
temp=i;
while(temp){
if(arr[temp%10]>0){
arr[temp%10]--;
temp=temp/10;
}
else{
zero=1;
}
}
}
完整代码如下:
#include
#include
int main(int argc, char *argv[])
{
int arr[10]={2021},i,temp,zero=0;
for(i=1;i<10;i++){
arr[i]--;
}
for(i=11;i<100;i++){
arr[i%10]--;
arr[i/10]--;
}
for(i=100;zero=0;i++){
temp=i;
while(temp){
if(arr[temp%10]>0){
arr[temp%10]--;
temp=temp/10;
}
else{
zero=1;
}
}
}
printf("%d",i);
// 请在此输入您的代码
return 0;
}
您的代码中存在一个问题:在判断卡片剩余数量是否为零时,使用的是赋值运算符“=”,而不是相等比较运算符“==”,导致变量zero始终为1,循环无法退出。
将“zero=0”修改为“zero==0”即可解决问题。另外,程序中似乎没有对剩余卡片数进行判断,如果全部用完了,也应该退出循环。可以在while循环内加上判断:
while(temp && !zero)
这样就能确保在剩余卡片数量为零时退出循环了。
修改后的完整代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[10] = {2021}, i, temp, zero = 0;
for(i = 1; i < 10; i++) {
arr[i]--;
}
for(i = 11; i < 100; i++) {
arr[i % 10]--;
arr[i / 10]--;
}
for(i = 100; !zero && i <= 9999; i++) { // 加上剩余卡片数判断,最多遍历9999次
temp = i;
while(temp && !zero) { // 加上剩余卡片数判断
if(arr[temp % 10] > 0) {
arr[temp % 10]--;
temp /= 10;
}
else {
zero = 1;
}
}
}
printf("%d", i - 1); // 因为上面循环已经将i加1了,所以输出时需要减1
return 0;
}
如果一个整形常量的第一个字符是数字 0 ,那么该常量将被视作八进制数。
示例代码:
#include <stdio.h>
int main() {
int i = 10;
int j = 010; //前面加 0,视作八进制数
printf("i=%d\n",i);
printf("j=%d\n", j);
return 0;
}
运行结果: