Problem A: C语言-数字交换
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1086 Solved: 391
[Submit][Status][Web Board][Creator:Imported]
Description
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。
Input
10个整数
Output
整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)
Sample Input
2 1 3 4 5 6 7 8 10 9
Sample Output
1 2 3 4 5 6 7 8 9 10
刚开始思考的时候,没有想到特殊情况,即最大值就在第一个位置。
然后,看了别人的提示,自己写的时候,又把问题想复杂了,即:
最大的在第一个 最小的在最后一个
最大的在第一个 最小的不在最后一个
最大的不在第一个 最小的在最后一个
最大的不在第一个 最小的不在最后一个
最大最小的值相同
好歹,在codeup的OJ上通过了,但是这个思维真的很复杂。
参看别人的代码,只分了 最大值就在or不在第一个位置 两种情况。
大神代码连接:https://blog.csdn.net/nanke_4869/article/details/99655220
我的代码:

#include <iostream> #include <vector> using namespace std; void exchange(int &a, int &b){ int temp = a; a = b; b = temp; } int main(){ vector<int> v; int temp, maxn, minn, k1, k2; while(scanf("%d", &temp) != EOF){ v.clear(); k1 = 0; k2 = 0; maxn = temp; minn = temp; v.push_back(temp); for(int i=1; i<10; i++){ scanf("%d", &temp); if(maxn < temp){ maxn = temp; k1 = i; } if(minn > temp){ minn = temp; k2 = i; } v.push_back(temp); } //最小与第一个交换 if(k1 != k2){ if(k1 != 0){ //最大的不在第一个 exchange(v[0], v[k2]); if(k1 != 9){ //最大的已在最后一个 exchange(v[9], v[k1]); } }else{ //最大的在第一个 if(k2==9){ //最小的在最后一个 exchange(v[0], v[9]); }else{ //注意要先把最大的放在最后一位! exchange(v[9], v[k1]); exchange(v[0], v[k2]); } } } for(int i=0; i<10; i++){ printf("%d ", v[i]); } printf(" "); } return 0; }