http://codeforces.com/problemset/problem/135/A
题意 : 我能说我卡在这个题的题意上很久吗。。。。。这个题就是在数组里找一个数,然后找另一个数把他替换掉,然后再对数组进行排序,输出可能的数组最小值。。。。
思路 : 一开始没反应过来,不知道要替换掉哪个数,后来一想才明白,要求最后得到的最小,那就把最大的那个替换掉不就行了,而且最简单的还是替换成1,然后要注意的一点是因为题目中说必须要替换掉一个,而且不能用自己替换掉自己,所以要考虑万一输入的全是1,就要替换成2。。。。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std ; int a[101000] ; int main() { int n ; while(cin >> n) { for(int i = 0 ; i < n ; i++) scanf("%d",&a[i]) ; sort(a,a+n) ; if(a[n-1] == 1) a[n-1] = 2 ; else{a[n-1] = 1 ; sort(a,a+n) ; } sort(a,a+n) ; for(int i = 0 ; i < n-1 ; i++) printf("%d ",a[i]) ; printf("%d ",a[n-1]) ; } return 0 ; }