首页 > 代码库 > 去重排序
去重排序
题目背景
一个简单的数学题。。。
题目描述
输入一个数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;}
去重排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。