贪心(SOJ4124)

来源:互联网 发布:山下智久石原里美 知乎 编辑:程序博客网 时间:2024/06/06 08:58
(2012-07-11 22:22:55)
SOJ4124:http://cstest.scu.edu.cn/soj/problem.action?id=4124
    贪心。

    首先排序,然后扫描到a[i-1]+1等于a[i],则需要从第i+1的位置开始找一个大于a[i]的数a[j],把这个数和a[i]交换,如果找不到则将a[i-1]和a[i]交换。最外层循环条件是存在某个a[i]==a[i-1]+1。

代码:

#include<iostream>#include<algorithm>using namespace std;void swap(int s[],int a,int b){    int temp=s[a];    s[a]=s[b];    s[b]=temp;}int main(){    int test;    scanf("%d",&test);    int s[105];    while(test--)    {        int n;        scanf("%d",&n);        int i,j;        for(i=0;i<n;i++)            scanf("%d",&s[i]);        sort(s,s+n);        int flag=1;        int temp=1;        while(flag)        {            flag=0;            for(i=temp;i<n;i++)            {                if(s[i]==s[i-1]+1)                {                    flag=1;                    for(j=i+1;j<n;j++)                    {                        if(s[j]>s[i])                        {                            swap(s,i,j);                            temp=i+1;                            break;                        }                    }                    if(j==n)                        swap(s,i-1,i);                }            }        }        for(i=0;i<n;i++)            printf("%d ",s[i]);        cout<<endl;    }    return 0;}

0 0
原创粉丝点击