首页 > 试题广场 >

编程题,输入一组大于等于0的整数,根据从大到小的顺序排序后输

[问答题]
输入一组大于等于0的整数,根据从大到小的顺序排序后输出;如果排序后有连续数时,只输出连续输的最大和最小数。输入的所有整数都各不相同,即不用考虑两个整数相同的情况。
如: 输入4,7,2,1,5,8,9,11 输出11,9,7,5,4,2,1
第一步当然是先排序,各种排序法都行。用Java的话最方便啦,调用Arrays.sort(int[]),一步完成(当然这个是顺着排,输出的时候倒过来就行了)。接下来是去掉连续数的中间数字。注意排序后数组的头和尾必然要输出的,于是循环从1:length-2,判断这些元素跟它前后的元素是否都相差1。
发表于 2014-11-14 17:06:46 回复(0)
 #include<iostream>
using namespace std;
void sort(int data[],int n)//选择排序,将输入的数组按小到大的顺序排列出来
{int i,j;
	for(i=0;i<n;i++)
	{int index=i;
		for(j=i+1;j<n;j++)
		{if(data[j]<data[index]) index=j;}
		if(i!=index){
			int t=data[i];data[i]=data[index];data[index]=t;}}
}
void shanchu(int data[],int n){//函数的作用是删除连续的该元素
	for(int i=7;i>=0;i--){     
		if(data[i]!=(data[i-1]+1))
			cout<<data[i]<<" ";
		else
			{cout<<data[i]<<" ";
		while(data[i]==(data[i-1]+1))
		{i--;}//当遇到连续数时,用i--来跳过该元素

		cout<<data[i]<<" ";}}}
int main()
	{int data[8];int i=0,n=0;
	cout<<"please input the original array:";
	while(cin>>data[i++])n++;
	void sort(int data[],int n);
	sort(data,7);
	void shanchu (int data[],int n);
	shanchu (data,7);
	return 0;
}

发表于 2015-08-18 20:43:05 回复(0)

第一步是排序

第二步定义一个结构体数组,结构体有2个元素,1个保存数,1个作为是否打印标志

第三步将数存进结构体数组,从第二个到倒数第二个开始遍历,判断是否有中间数,改标志

第四步打印无标准的数

发表于 2019-03-13 12:54:38 回复(0)
package cn.com.ecnu;
import java.util.Arrays;
import java.util.Scanner;

public class Solution2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m ;
        m = scanner.nextInt();
        int[] list = new int[m];
        int[] result = new int [m];
        int i = 0;
        while(--m >=0)
        {
            list[i++] = scanner.nextInt();    
        }
        Arrays.sort(list);
        int j = 0;
        if(list.length > 2)
        {
            int low = 0;
            int high = 1;
            while(low < high && high < list.length)
            {
                while(list[high] - list[high -1] == 1)
                {
                    high++;
                }
                high--;
                result[j++]=list[low];
                result[j++]= list[high];
                low = ++high;
                high++;
                if(low == (list.length - 1))
                {
                    result[j++]= list[low];
                }
            }
            
        }
        for(int  k = 0;k<j;k++)
        {
            System.out.println(result[k]);
        }
        
    }
    

}

发表于 2018-08-07 14:49:37 回复(0)
戴头像
#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
//freopen("in.txt","r",stdin);
int num[100];
int i=0;
while(cin>>num[i++]){char c;cin>>c;}
int n=--i;

sort(num,num+n);
if(n==0)return 0;
cout<<num[0]<<" ";
for(i=1;i<n-1;i++)
{
if(num[i]==num[i-1]+1&&num[i]==num[i+1]-1)continue;
elsecout<<num[i]<<" ";
}
if(n!=1)cout<<num[n-1]<<endl;
elsecout<<endl;

return 0;
}

发表于 2016-03-03 15:28:41 回复(0)
#include <iostream>
#include <algorithm>
using namespace std;

bool cmp(int a, int b)
{
return a > b;
}

int main()
{
int c[1000];
int count = 0,tmp = -2,flag = 0;

while (cin >> c[count]){ count++; };
sort(c, c + count, cmp);
for (int i = 0; i < count; i++)
{
if (c[i] != tmp - 1)
{
if (flag)
{
cout << tmp << " ";
flag = 0;
}
cout << c[i] << " ";
tmp = c[i];
}
else
{
tmp--;
flag = 1;
}
 }
if (flag)
cout << c[count-1];
return 0;
}
发表于 2015-08-19 03:35:27 回复(0)