先看一下题目

说明

请问n个一位数能够组成的最大的整数是多少。 比如,n=3,3个整数为1、3、9,那么组成的最大整数是931。 比如,n=4,4个整数为2、8、0、6,那么组成的最大整数是8620。

输入格式

第一行为一个整数n(n<10) 第二行为n个一位数

输出格式

一行,包含一个组成的最大整数。

输入数据 1

4

7 3 4 4

输出数据 1

7433

那么,其实就是先输入一个n代表数字的个数,然后把这n个数字组成一个最大的数字,那其实就是把这些数字进行排序,这里就要用到数组来存储这些数字,并且进行排序,最后输出。

先来看设一个数组输入数据的部分

int n;//设置n
	scanf("%d",&n);//n赋值
	int shuzu[n];//创建一个大小为n的数组
	for(int i=0;i<n;i++){
		scanf("%d",&shuzu[i]);//输入n个数字 
	}

这里应该是简单易懂,通过循环来输入数字,然后我们只要将数组排序,然后输出就可以了

下面是排序部分,排序最简单的是冒泡排序,原理就是,它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 代码展示

int temp;
	for (int i=0;i<n-1;i++) {  
        for (int j=0;j<n-i-1;j++) {  
            if (shuzu[j]>shuzu[j+1]) {  
                temp =shuzu[j];  
                shuzu[j]=shuzu[j + 1];  
                shuzu[j+1]=temp;  
            }  
        }  
    }

最后,输出数组

for(int i=n-1;i>=0;i--){
    	printf("%d",shuzu[i]);//这里是冒泡排序的时候派成从小到大了,所以从最后一个输出 
	}

最后的最后,完整代码展示

#include<stdio.h>
int main(){
	int n;//设置n
	scanf("%d",&n);//n赋值
	int shuzu[n];//创建一个大小为n的数组
	for(int i=0;i<n;i++){
		scanf("%d",&shuzu[i]);//输入n个数字 
	} 
	int temp;
	for (int i=0;i<n-1;i++) {  
        for (int j=0;j<n-i-1;j++) {  
            if (shuzu[j]>shuzu[j+1]) {  
                temp =shuzu[j];  
                shuzu[j]=shuzu[j + 1];  
                shuzu[j+1]=temp;  
            }  
        }  
    }  
    for(int i=n-1;i>=0;i--){
    	printf("%d",shuzu[i]);//这里是冒泡排序的时候派成从小到大了,所以从最后一个输出 
	}
	return 0;
}

2 条评论

  • 1