题目
思路
题目我理解错了,认为是直接用他所给出的数进行最小排列。花了大量的时间,做错。
附上理解错误的代码(能实现给出10个数,用这10个数组出最小数):
注:此外memset中的void * memset ( void * ptr, int value, size_t num );最后一项是指内存块大小,非数组长度。最好都用sizeof(),否则很容易出错。
#include <bits/stdc++.h>
using namespace std;
void print(int b[],int i){
if(b[i]!=0) {
cout<<i;
b[i]--;
return;
}
else print(b,i++);
}
int main(){
int a[10];
for(int i=0;i<10;i++){
cin>>a[i];
}
int b[10];memset(b,0,sizeof(b));
for(int i=0;i<10;i++){
b[a[i]]+=1;
}
if(b[0]!=0){
print(b,1);
}
for(int i=0;i<10;i++){
while(b[i]!=0) {
cout<<i;
b[i]--;
}
}
}
这题关于0不能在首位的实现,需要动一点脑子。也没那么简单的。
我觉得这题还是得注意一下,0不能首位的实现,不难,但是要是考场上没思路就真的很麻烦。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10];
for(int i=0;i<10;i++){
cin>>a[i];
}
for(int i=1;i<10;i++){
if(a[i]!=0) {
cout<<i;
a[i]--;
break;
}
}
for(int i=0;i<10;i++){
while(a[i]!=0){
cout<<i;
a[i]--;
}
}
return 0;
}