📄 组数游戏.txt
字号:
老师有个题目要做,急啊~~~~~
设有N个正整数(N<20),将它们连成一排,组成一个最大的多位数。程序输入:N,程序输出:N个数连接成的多位数。
【提示】:(老师告诉我们的提示)
设计思路:
比如我们输入的是 123 2 33 1006 12 这样几个数
我们先找出最大的数字的位数为四位,在将所有的数字变成四位数:
1230 2000 3300 1006 1200
然后从大到小排序:3300 2000 1230 1200 1006
这样将后面加上的0去掉的序列就是最大的数字:332123121006
#include "stdio.h"
typedef struct
{
int num;
int ws;
int z_num;
}NODE;
NODE dig[22];
int n;
NODE max;
int getws(int a)
{
int r=0;
while(a!=0)
{
r+=1;
a/=10;
}
return r;
}
void getnum()
{
int i=0;
printf("input n:");
scanf("%d",&n);
for(i=1;i<=n;i+=1)
{
printf("input the %d number:",i);
scanf("%d",&(dig[i].num));
dig[i].ws = getws(dig[i].num);
if(dig[i].num>max.num)
max=dig[i];
}
}
void fill_zero()
{
int i;
for(i=1;i<=n;i+=1)
{
for(;dig[i].ws<max.ws;)
{
dig[i].num*=10;
dig[i].ws+=1;
dig[i].z_num+=1;
}
}
}
void sort()
{
int i;
int j;
NODE tmp;
for(i=1;i<=n;i+=1)
{
for(j=1;j<n;j+=1)
{
if(dig[j].num<dig[j+1].num)
{
tmp=dig[j];
dig[j]=dig[j+1];
dig[j+1]=tmp;
}
}
}
}
void back()
{
int i;
for(i=1;i<=n;i++)
{
while(dig[i].z_num>0)
{
dig[i].num/=10;
dig[i].z_num-=1;
}
}
}
void print()
{
int i;
for(i=1;i<=n;i++)
printf("%d",dig[i].num);
}
main()
{
getnum();
fill_zero();
sort();
back();
print();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -