求最大数
2008-03-08 12:48:17 来源:WEB开发网核心提示:一 问题描述设有n个正整数(n<=20),将它们联成一排,求最大数,组成一个最大的多位数,程序输入:n,程序输出:n个数连接成的多位数,二 问题分析可以将问题这样变化一下:比如我输入的是123233100612这样几个数字我先找出最大的数字的位数为四位,再将所有的数字变成四位数:12302000330010061
一 问题描述
设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数。程序输入:n,程序输出:n个数连接成的多位数。二 问题分析
可以将问题这样变化一下:
比如我输入的是 123 2 33 1006 12这样几个数字
我先找出最大的数字的位数为四位,再将所有的数字变成四位数:
1230 2000 3300 1006 1200
然后进行排序
3300 2000 1230 1200 1006
这样将后面加上的0去掉的序列不就是最大数字吗?
于是最大数字就是
332123121006
因为以下程序用的INT的类型所以只在-32728~32727间有效,假如想要更大范围须改成long类型 三 C程序 #define MAXSIZE 100
#include<stdio.h>
int max(int a[],int i) /*判定出最大数字的位数*/
{int m;
int size();
m=a[i];
for(;i>=0;i--)
if(a[i]>m)
m=a[i];
return(size(m));
} int size(int interger) /*判定出这个要组合数字的位数*/
{
if(interger>10000)
return 5;
else if(interger>1000)
return 4;
else if(interger>100)
return 3;
else if(interger>10)
return 2;
else
return 1;
} int change(int i ,int maxsize) /*将本数字变成和最大数相同位数的数字*/
{
int size();
switch(maxsize-size(i))
{case 0:break;
case 1:i=i*10;break;
case 2:i=i*100;break;
case 3:i=i*1000;break;
case 4:i=i*10000;break;
default:PRintf("error\n");
}
return i;
} main()
{
int a[MAXSIZE],b[MAXSIZE],i,j,count,temp,s;
printf("Please input some intergers and input -1 to finish\n\n");
for(i=0;i<MAXSIZE;i++)
{
scanf("%d",&a[i]);
if(a[i]<0)
break;
}
count=i-1;
s=max(a,count);
for(i=count;i>=0;i--)
b[i]=change(a[i],s);
for(j=0;j<=count-1;j++) /*用冒泡法对变化数排序,其实本质是在对原组合数字进行排序*/
for(i=0;i<=count-1;i++)
{
if(b[i]<b[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
temp=b[i];
b[i]=b[i+1];
b[i+1]=temp;
}
}
printf("max interger =");
for(i=0;i<=count;i++)
printf("%d",a[i]);
}
四 实验结果 输入:56 2 1 输出:5621 输入:21 35 2 输出:35221
设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数。程序输入:n,程序输出:n个数连接成的多位数。二 问题分析
可以将问题这样变化一下:
比如我输入的是 123 2 33 1006 12这样几个数字
我先找出最大的数字的位数为四位,再将所有的数字变成四位数:
1230 2000 3300 1006 1200
然后进行排序
3300 2000 1230 1200 1006
这样将后面加上的0去掉的序列不就是最大数字吗?
于是最大数字就是
332123121006
因为以下程序用的INT的类型所以只在-32728~32727间有效,假如想要更大范围须改成long类型 三 C程序 #define MAXSIZE 100
#include<stdio.h>
int max(int a[],int i) /*判定出最大数字的位数*/
{int m;
int size();
m=a[i];
for(;i>=0;i--)
if(a[i]>m)
m=a[i];
return(size(m));
} int size(int interger) /*判定出这个要组合数字的位数*/
{
if(interger>10000)
return 5;
else if(interger>1000)
return 4;
else if(interger>100)
return 3;
else if(interger>10)
return 2;
else
return 1;
} int change(int i ,int maxsize) /*将本数字变成和最大数相同位数的数字*/
{
int size();
switch(maxsize-size(i))
{case 0:break;
case 1:i=i*10;break;
case 2:i=i*100;break;
case 3:i=i*1000;break;
case 4:i=i*10000;break;
default:PRintf("error\n");
}
return i;
} main()
{
int a[MAXSIZE],b[MAXSIZE],i,j,count,temp,s;
printf("Please input some intergers and input -1 to finish\n\n");
for(i=0;i<MAXSIZE;i++)
{
scanf("%d",&a[i]);
if(a[i]<0)
break;
}
count=i-1;
s=max(a,count);
for(i=count;i>=0;i--)
b[i]=change(a[i],s);
for(j=0;j<=count-1;j++) /*用冒泡法对变化数排序,其实本质是在对原组合数字进行排序*/
for(i=0;i<=count-1;i++)
{
if(b[i]<b[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
temp=b[i];
b[i]=b[i+1];
b[i+1]=temp;
}
}
printf("max interger =");
for(i=0;i<=count;i++)
printf("%d",a[i]);
}
四 实验结果 输入:56 2 1 输出:5621 输入:21 35 2 输出:35221
- ››最大限度利用Maven settings.xml文件
- ››最大化 AIX 上的 Java 性能,第 5 部分: 参考资料...
- ››最大化 AIX 上的 Java 性能,第 4 部分: 监视流量...
- ››最大化 AIX 上的 Java 性能,第 3 部分: 更多就是...
- ››最大化 AIX 上的 Java 性能,第 2 部分: 速度需求...
- ››最大化 AIX 上的 Java 性能,第 1 部分: 基础
- ››求最大数
- ››最大化J2EE和数据库交互操作的性能
- ››最大化JAVA代码的可重用性
- ››最大限制地提高代码的可重用性
- ››最大化WebLogic集群、可用性和安全性
- ››最大化节约Windows Vista系统的硬盘空间
赞助商链接