|
10鱼币
任务描述
给你一个正整型数k(2<=k<=10000),你要做的是:先把1到k中的所有奇数从小到大输出,再把1到k中的所有的偶数从小到大输出。
输入格式:
第一行有一个整数n(2<=n<30)表示有n组测试数据;
之后的n行,每行有一个整型数k。
输出格式:
对于每组数据:
第一行输出所有的奇数(行末尾没有空格)
第二行输出所有的偶数(行末尾没有空格)
各组数据之间有一个空行。
输入样例:
3
5
10
14
输出样例:
1 3 5
2 4
1 3 5 7 9
2 4 6 8 10
1 3 5 7 9 11 13
2 4 6 8 10 12 14
麻烦讲一下,谢谢
解析已经写在程序中,如果还有不懂的,可以提出来
- #include <stdio.h>
- /* *
- * 函数名:void swap(int *a, int i, int j)
- * 作用:交换数据
- * 参数:
- * a:数据buf
- * i:数组下标
- * j:数组下标
- * 返回值:
- */
- void swap(int *a, int i, int j)
- {
- int tmp = a[i];
- a[i] = a[j];
- a[j] = tmp;
- }
- /* *
- * 函数名:void quick_sort(int *a, int left, int right)
- * 作用:将数据按照从小到大排序
- * 参数:
- * a:数据buf
- * left:最左边的起始点
- * right:最右边的结束长度
- * 返回值:
- */
- void quick_sort(int *a, int left, int right)
- {
- //边界条件
- if (left>=right)
- {
- return;
- }
- int i = left, j = right;
- int num = a[right]; //以右边的值为基准值
- while(i<j)
- {
- while(i<j && a[i]<num)//把小的数据往前移
- {
- i++;
- }
- if (i<j)
- {
- a[j] = a[i];
- j--;
- }
- while(i<j && a[j]>num)//把大的数据往右移
- {
- j--;
- }
- if (i<j)
- {
- a[i] = a[j];
- i++;
- }
- }
- a[j] = num;
- //以基准值为中心,小的在左边是一个数组
- quick_sort(a, left, i-1);
- //以基准值为中心,大的在右边是一个数组
- quick_sort(a, i+1, right);
- }
- /* *
- * 函数名:void oddCheck (int * data, int datanum, int* oddData, int* oddnum)
- * 作用:得到传入数据中的所有奇数
- * 参数:
- * data:待解析的数据buf
- * datanum:数据长度
- * evenData:存放奇数数据的buf
- * evennum:奇数数据长度
- * 返回值:
- */
- void oddCheck (int * data, int datanum, int* oddData, int* oddnum)
- {
- int j = 0;
- for (int i = 0; i < datanum; i++)
- {
- //如果数据对2取余后不为0,即为奇数
- if(data[i]%2 != 0)
- {
- oddData[j++] = data[i];
- }
- }
- *oddnum = j;
- quick_sort(oddData, 0, *oddnum-1);
-
- }
- /* *
- * 函数名:void evenCheck (int * data, int datanum, int* evenData, int* evennum)
- * 作用:得到传入数据中的所有偶数
- * 参数:
- * data:待解析的数据buf
- * datanum:数据长度
- * evenData:存放偶数数据的buf
- * evennum:偶数数据长度
- * 返回值:
- */
- void evenCheck (int * data, int datanum, int* evenData, int* evennum)
- {
- int j = 0;
- for (int i = 0; i < datanum; i++)
- {
- //如果数据对2取余后不为0,即为奇数
- if(data[i]%2 == 0)
- {
- evenData[j++] = data[i];
- }
- }
- *evennum = j;
- quick_sort(evenData, 0, *evennum-1);
- }
- int main(int argc, char const *argv[])
- {
- int num = 0, oddnum = 0, evennum = 0;
- int data[30] = {0}, oddData[30] = {0}, evenData[30] = {0};
- // printf("请输入希望输入的整数个数:\n"); //不想要可以屏蔽
- scanf("%d",&num);
- if(num <2 || num >=30)
- {
- printf("请输入大于2小于30的值\n");
- return 0;
- }
- for (int i = 0; i < num; i++)
- {
- scanf("%d",&data[i]);
- }
- for (int i = 0; i < num; i++)
- {
- printf("%d\n",data[i]);
- }
-
- oddCheck(data,num,oddData,&oddnum);
- evenCheck(data,num,evenData,&evennum);
- for (int i = 0; i < oddnum-1; i++)
- {
- printf("%d ",oddData[i]);
- }
- printf("%d\n",oddData[oddnum-1]);
- for (int i = 0; i < evennum-1; i++)
- {
- printf("%d ",evenData[i]);
- }
- printf("%d\n",evenData[evennum-1]);
-
- return 0;
- }
复制代码
|
最佳答案
查看完整内容
解析已经写在程序中,如果还有不懂的,可以提出来
|