Description
漂亮的涂鸭梨学姐买了一副字母纸牌,每张牌上有一个字母(只包含ABCD四个大写字母)。她把纸牌摆成M行N列后( 0 < M < 100 , 0 < N < 1024 ),她想统计一下“每列”出现次数最多的字母,注意:如果一列中有多个字母出现次数一样多,那么取ASCII码最小的那个字母。聪明的你(+_+)v,帮帮她吧。
Input
第一行为一个正整数T,表示有T组测试数据需要你求解。
紧接着,每组数据第一行为两个正整数M和N,M是行数,N是列数。然后是M行,表示M个字母串。
Output
输出为T行字符串,表示对应每组数据“每列出现次数最多字母”的统计结果。
Sample Input
2
2 4
ABCD
ADCB
4 5
ABBBA
ABBBB
ADDDB
CDDDB
Sample Output
ABCB
ABBBB
思路:
1.先将输入的字符保存到数组中,如主函数中for(i)循环所写
2.将保存下来的数组进行统计,然后进行比较谁的数量多,也就是compare函数中的for(l)循环和下面的if所写
#include<stdio.h>
char arr[100][100][1024];
int compare(int n,int k,int i)
{
int b, l;
static int A, B, C, D;
for (b = 0; b <k; b++)
{
A = 0;
B = 0;
C = 0;
D = 0;
for (l = 0; l < n; l++)
if (arr[i][l][b] == 'A')
A++;
else if (arr[i][l][b] == 'B')
B++;
else if (arr[i][l][b] == 'C')
C++;
else
D++;
if (A >= B && A >= C && A >= D)
printf("A");
else if (B >= C && B >= D && B > A)
printf("B");
else if (C >= D && C > A && C > B)
printf("C");
else
printf("D");
}
return 0;
}
int main()
{
static int a, i, n, sum,k;
int l, s;
scanf("%d", &a);
for (i = 0; i < a; i++)
{
scanf("%d", &n);
scanf("%d", &k);
for (l = 0; l < n; l++)
scanf("%s", arr[i][l]);
compare(n, k, i);
printf("\n");
}
}