题目描述
注:本题只需要提交填写部分的代码,请按照C语言方式提交。
mmm 个班级每班选 nnn 个人穿不同颜色的衣服(所有衣服颜色都不同),参加学校运动会大型团体操表演。每班站一行,每个人在班级所在行中的位置是固定不变的,班级所在行是可以改变的。任选一列同学,要求按照该名同学衣服颜色的首字母 ASCII 升序对班级所在行进行排列。
#include <stdio.h> #include <stdlib.h> #define M 3 /* 班级数 */ #define N 4 /* 每班人数 */ int main() { char color[M][N] = { {'R','G','B','C'}, {'B','Y','W','O'}, {'Y','R','P','W'} } ; char *pcolor[M]; int i, j, k; char *temp; /* 初始化指针数组 */ for (i= 0; i < M; i++) pcolor[i]=color[i]; /* 输入 */ for (i= 0; i < M; i++) { for (j= 0; j < N; j++) scanf("%c", color[i]+j); scanf("%*c"); } scanf("%d", &k); /* 冒泡排序 */ for (i= 0; i < M-1; i++) for(j=0; j<M-i-1; j++) /* 在此之间完善代码 */ ...... /* 在此之间完善代码 */ for (i= 0; i < M; i++) { /* 按新序输出各班的颜色 */ for(j=0; j<N; j++) printf("%c", *(pcolor[i]+j)); printf("\n"); } for (i= 0; i < M; i++) { /* 按原序输出各班的颜色 */ for (j= 0; j < N; j++) printf("%c", color[i][j]); printf("\n"); } return 0; }
输入
输入 333 行 444 列的色彩方案字符数组。(每个字符表示一种颜色)
输入一个数字 kkk 代表所选列数(1≤k≤n1 \le k \le n1≤k≤n)。
输出
输出排列后的色彩方案和原来的色彩方案
输入输出样例
样例输入 #1
复制
RGBC
BYWO
YRPW
2
样例输出 #1
复制
RGBC
YRPW
BYWO
RGBC
BYWO
YRPW
分析:
本道题主要思想就是把color所有的值先赋值给pcolor,然后对pcolor进行冒泡排序,pcolor[j]+k-1指的是pcolor中第j行的字符串中第k个字符,排序的时候只需要比较这一个字符的大小,然后对整个一行字符串就是pcolor[j]整体交换排序。
代码:
if(*(pcolor[j]+k-1)>*(pcolor[j+1]+k-1))
{
temp=pcolor[j];
pcolor[j]=pcolor[j+1];
pcolor[j+1]=temp;
}