【解题思路】
① 身为一个懒癌患者,当然是数组能少开就少开,排序次数能少则少,嘿嘿,不建议学习,仅当作一种解题思路;
② 根据题意看似要将奇数和偶数分开来排序,但其实可以通过改变数据来进行统一排序的;
【1】奇数在前,偶数在后
这一目的充分利用数据规则就可以实现,比如利用“输入数据小于等于30000”这一条件,有两种实现的办法:
① 将所有奇数加上30000,再将全部数据按从大到小排序;
② 将所有偶数加上30000,再将全部数据按从小到大排序。
上述两种操作都能将奇偶分开,且奇数加上30000还是奇数,偶数加上30000也还是偶数,后续输出时很好分辨。
【2】奇数按从大到小排序
从大到小排列,这不是正好契合了上面第【1】点讨论的第 ① 种情况么。
【3】偶数按从小到大排序
再对上面第【1】点讨论的第 ① 种情况的偶数部分做一下数据转变即可,让偶数的值等于30000减去该偶数。
数据转变后进行所有数据的从大到小排列,偶数部分自然就变成从小到大排列了,且30000减去偶数也还是偶数。
【注意事项】
① 注意题目给出的数据条件即可,数据做了变换处理后,排完序记得变回去。
【参考代码】
#include<stdio.h> int main(void) { int a[11]; for(int i=1;i<=10;i++) { scanf("%d",&a[i]); // 输入10个数 a[i]=a[i]%2==0?30000-a[i]:30000+a[i]; // 若是奇数加3W,若是偶数被3W减 } for(int i=1;i<=10;i++) // 从大到小排序 for(int j=i+1;j<=10;j++) if(a[j]>a[i]) // 交换a[i]和a[j] { a[0]=a[j]; // a[0]仅做交换变量使用 a[j]=a[i]; a[i]=a[0]; } for(int i=1;i<=10;i++) { if(i!=1) // 按输出要求加空格 printf(" "); if(a[i]%2==0) // 输出排完序的的数,把数变回去 printf("%d",30000-a[i]); else printf("%d",a[i]-30000); } return 0; }
0.0分
2 人评分
C语言训练-求素数问题 (C语言代码)浏览:1509 |
C语言程序设计教程(第三版)课后习题9.2 (Java代码)浏览:696 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:633 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:782 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
校门外的树 (C语言代码)浏览:733 |
矩阵加法 (C语言代码)浏览:1768 |
循环入门练习6 (C语言代码)浏览:1058 |
C二级辅导-求偶数和 (C语言代码)浏览:707 |
矩形面积交 (C语言代码)浏览:1433 |