码迷,mamicode.com
首页 > 编程语言 > 详细

去重排序

时间:2017-02-03 15:30:58      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:ace   namespace   输入输出格式   return   数字   bsp   turn   nbsp   最大   

题目背景

一个简单的数学题。。。

题目描述

输入一个数N(N<=200位),拆分,得出最小的和最大的数列。

如: 123求出最小的=123

123求出最大的=321

再求出它们的差。

如: 321-123=?

若不是数字,直接输出NO

输入输出格式

输入格式:

 

第一行:输入一个数N(N<=200位)

 

输出格式:

 

输出看【题目描述】

 

输入输出样例

输入样例#1:
123
输出样例#1:
321-123=198
输入样例#2:
10
输出样例#2:
10-01=9
输入样例#3:
撒反对威锋网
输出样例#3:
NO

说明

对于%30的数据=<30位

对于%60的数据=<60位

对于%100的数据=<200位

 

思路:

  两遍排序,一遍减法,去掉前导0然后输出;

  有一个点是最大排列等于最小排列,这时要输出一个0;

 

 

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int len,ans[300];

char ch[300],ch_1[300],ch_2[300];

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

int main()
{
    cin>>ch;
    len=strlen(ch);
    for(int i=0;i<len;i++)
    {
        if(ch[i]>9||ch[i]<0)
        {
            cout<<"NO"<<endl;
            return 0;
        }
        ch_1[i]=ch[i],ch_2[i]=ch[i];
    }
    sort(ch_1,ch_1+len,cmp);
    sort(ch_2,ch_2+len);
    cout<<ch_1<<-<<ch_2<<=;
    for(int i=0;i<len;i++)
    {
        ans[i]=ch_1[i]-ch_2[i];
    }
    for(int i=len-1;i>=0;i--)
    {
        if(ans[i]<0) ans[i-1]--,ans[i]+=10;
    }
    bool if_=true;
    for(int i=0;i<len;i++)
    {
        if(ans[i]==0) continue;
        if_=false;
        for(int j=i;j<len;j++) cout<<ans[j];
        break;
    }
    if(if_) cout<<0;
    return 0;
}

 

去重排序

标签:ace   namespace   输入输出格式   return   数字   bsp   turn   nbsp   最大   

原文地址:http://www.cnblogs.com/IUUUUUUUskyyy/p/6362619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!