Openjudge-计算概论(A)-整数奇偶排序

描述:

输入10个整数,彼此以空格分隔
重新排序以后输出(也按空格分隔),要求:
1.先输出其中的奇数,并按从大到小排列;
2.然后输出其中的偶数,并按从小到大排列。输入任意排序的10个整数(0~100),彼此以空格分隔输出按照要求排序后输出,由空格分隔样例输入

4 7 3 13 11 12 0 47 34 98

样例输出

47 13 11 7 3 0 4 12 34 98

提示1. 测试数据可能有很多组,请使用while(cin>>a[0]>>a[1]>>...>>a[9])类似的做法来实现;

2. 输入数据随机,有可能相等。

思路:这题是有点难度,特别注意只有奇数没有偶数的情况,只有偶数没有奇数的情况。可能没有偶数,那么输出奇数后不要有空格!

代码如下:

 1 /*********************************
 2  *    日期:2013-2-5
 3  *    作者:SJF0115
 4  *    题号: 九度OJ 题目1117:整数奇偶排序
 5  *    来源:http://ac.jobdu.com/problem.php?pid=1117
 6  *    结果:AC
 7  *    来源:2008年北京大学图形实验室计算机研究生机试真题
 8  *    总结:注意只有奇数没有偶数的情况,只有偶数没有奇数的情况。可能没有偶数,那么输出奇数后不要有空格!
 9 **********************************/
10 #include<stdio.h>
11 #include<stdlib.h>
12 #include<string.h>
13 //偶数排序
14 int cmp(const void *a,const void *b){
15     return *(int *)a - *(int *)b;
16 }
17 //奇数排序
18 int cmp2(const void *a,const void *b){
19     return *(int *)b - *(int *)a;
20 }
21 int main()
22 {
23     int n,i,evenCount,oddCount;
24     int number[10];
25     int even[10];
26     int odd[10];
27     //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
28     while(scanf("%d",&number[0])!=EOF)
29     {
30         evenCount = 0;
31         oddCount = 0;
32         if(number[0] % 2){
33             odd[oddCount++] = number[0];
34         }
35         else{
36             even[evenCount++] = number[0];
37         }
38         for(i = 1;i < 10;i++){
39             scanf("%d",&number[i]);
40             //奇数
41             if(number[i] % 2){
42                 odd[oddCount++] = number[i];
43             }
44             //偶数
45             else{
46                 even[evenCount++] = number[i];
47             }
48         }
49         //排序
50         qsort(even,evenCount,sizeof(even[0]),cmp);
51         qsort(odd,oddCount,sizeof(odd[0]),cmp2);
52         //1.先输出其中的奇数,并按从大到小排列;2.然后输出其中的偶数,并按从小到大排列。
53         //输出奇数
54         int flag = 0;
55         for(i = 0;i < oddCount;i++){
56             if(flag){
57                 printf(" ");
58             }
59             printf("%d",odd[i]);
60             flag = 1;
61         }
62         //没有偶数只有奇数
63         if(evenCount == 0){
64             printf("\n");
65         }
66         //有偶数无奇数
67         else if(oddCount != 0){
68             printf(" ");
69         }
70         //输出偶数
71         for(i = 0;i < evenCount;i++){
72             if(i == evenCount-1){
73                 printf("%d\n",even[i]);
74             }
75             else{
76                 printf("%d ",even[i]);
77             }
78         }
79     }
80     return 0;
81 }
时间: 2024-08-05 08:41:17

Openjudge-计算概论(A)-整数奇偶排序的相关文章

题目1117:整数奇偶排序 (2008年北京大学图形实验室计算机研究生机试真题)

题目描述: 输入10个整数,彼此以空格分隔.重新排序以后输出(也按空格分隔),要求:1.先输出其中的奇数,并按从大到小排列:2.然后输出其中的偶数,并按从小到大排列. 输入: 任意排序的10个整数(0-100),彼此以空格分隔. 输出: 可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔. 样例输入: 4 7 3 13 11 12 0 47 34 98 样例输出: 47 13 11 7 3 0 4 12 34 98 提示: 1. 测试数据可能有很多组,请使用while(cin>>

2015年北京大学软件工程学科优秀大学生夏令营上机考试---B:整数奇偶排序

描述 给定10个整数的序列,要求对其重新排序.排序要求: 1.奇数在前,偶数在后: 2.奇数按从大到小排序: 3.偶数按从小到大排序. 输入 输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于100. 输出 按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开. 样例输入 4 7 3 13 11 12 0 47 34 98 样例输出 47 13 11 7 3 0 4 12 34 98 题目简单,可以用数据结构的数组求解,也可以用链表求解,数组简

题目1117:整数奇偶排序

题目描述: 输入10个整数,彼此以空格分隔.重新排序以后输出(也按空格分隔),要求: 1.先输出其中的奇数,并按从大到小排列: 2.然后输出其中的偶数,并按从小到大排列. 输入: 任意排序的10个整数(0-100),彼此以空格分隔. 输出: 可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔. 样例输入: 4 7 3 13 11 12 0 47 34 98 样例输出: 47 13 11 7 3 0 4 12 34 98 提示: 1. 测试数据可能有很多组,请使用while(cin>

1117.整数奇偶排序

题目描述: 输入10个整数,彼此以空格分隔.重新排序以后输出(也按空格分隔),要求: 1.先输出其中的奇数,并按从大到小排列: 2.然后输出其中的偶数,并按从小到大排列. 输入: 任意排序的10个整数(0-100),彼此以空格分隔. 输出: 可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔. 样例输入: 4 7 3 13 11 12 0 47 34 98 样例输出: 47 13 11 7 3 0 4 12 34 98 提示: 1. 测试数据可能有很多组,请使用while(cin>

九度OJ:题目1117:整数奇偶排序

1 #include<stdio.h> 2 #include<algorithm> 3 using namespace std; 4 const int N=10; 5 int main() 6 { 7 int arr[10],odd[10],even[10]; 8 while(scanf("%d",&arr[0])!=EOF) 9 { 10 for(int i=1 ; i<N ; ++i) 11 scanf("%d",&

【北大先修课】计算概论(A)题库全代码

题目很水就是全都是坑真是丧心病狂啊 把代码留下造福后来人QωQ 结构体与链表练习 生日相同2.0 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define MAXN 200 using namespace std; struct st { int m,d; string name; bool operator&

计算概论(A)/基础编程练习2(8题)/7:整数的个数

1 #include<stdio.h> 2 int main() { 3 int k,temp,n[3] = {0}; 4 5 // 输入k个正整数 6 scanf("%d",&k); 7 8 // 循环读入和进行算术 9 while(scanf("%d",&temp)!=EOF) { 10 switch(temp) { 11 case 1: 12 n[0]++; 13 break; 14 case 5: 15 n[1]++; 16 br

计算概论(A)/基础编程练习2(8题)/1:求平均年龄

1 #include<stdio.h> 2 int main() { 3 // 声明与初始化 4 int n, count=1, s=0, age=0; 5 6 // 输入学生人数 7 scanf("%d", &n); 8 9 // 循环读入 加和 10 while(count<=n) { 11 scanf("%d",&age); 12 s+=age; 13 count++; 14 } 15 16 // 计算平均年龄输出 17 pr

计算概论(A)/基础编程练习(数据成分)/1:短信计费

1 #include<stdio.h> 2 int main() { 3 // 输入当月发送短信的总次数n和每次短信的字数words 4 int n,words; 5 scanf("%d",&n); 6 float price=0.0; 7 8 while(scanf("%d",&words)!=EOF) { 9 // 所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短信发送 10 price+=(words%7