问卷调查

问卷调查

题目来源:江西理工大学OJ
题目地址:http://oj.jxust.edu.cn/problems/1235

题目描述
陈乐乐有n张调查表,每张调查表上有m道题目,每题有四个选项分别为A,B,C,D(题目都是单选)。
对于每张表陈乐乐会输入一串长为m的字符串,表示这m道题目的选项记录。
举个例子:
如有一张5道题的调查表,第一题选的是A,第二题是选的是A,第三题选的是C,第四题选的是D,第五题选的是B,那么乐乐将会输入AACDB。对于乐乐的输入,你的程序应该能统计出这n张表中每道题A,B,C,D出现的比例。详细输入输出请看样例。

输入
输入的第一行包括两个整数n和m(1<=n,m<=200),n表示调查表的张数,m表示每张调查表有m道题目。
接下来输入n行,每行是一串长为m(只含A,B,C,D)的字符串,表示调查表的选项记录。

输出
共输出m行,其中第i行输出的四个数ai bi ci di分别表示第i题A,B,C,D出现的比例,ai bi ci di用空格隔开,且保留小数点后两个数字。

样例输入

3 5
ABDCA
BCBCA
CDCAA
样例输出

0.33 0.33 0.33 0.00
0.00 0.33 0.33 0.33
0.00 0.33 0.33 0.33
0.33 0.00 0.67 0.00
1.00 0.00 0.00 0.00

先来一堆废话哈!这个题目它见证了我的成长,以前我看到这种题目,会感觉还是有一点点复杂的,想一次就能写好很不容易,因为以前我每次做这种细节的题目啊,很仔细,数据又比较多的题目,我经常出错,总是难以一遍过,但是今天,我成功了,我甚至在编译器上面只写了一遍就通过了,这就是我的成长!我会继续加油的!!

好了,言归正传,回归题目。这个题目的思路是比较简单的哈。我第一遍想到的做法使用字符串数组,但是发现不太好理解,然后就换成了二维数组,其实二者本质上是一样的,后者对我来说好理解一些。定义一个二维数组嘛,把n看作行数,把m看作列数,然后进行接下来的操作。先输入,输入完成后,要一题一题观察与操作,所以要把二维数组在心里倒置,也就是一列列的去操作,这个完全可以在代码里面体现哈!然后对每列的A,B,C,D进行计数,然后进行计算。大家配和代码学习一下吧!

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n, m;
    char a[1000][1000];
    cin >> n >> m;
    double b[1000] = {};//先定义为0,后面要使用
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> a[i][j];
        }
   }
    for (int j = 0; j < m; j++)
    {
        memset(b, 0, 1000);
        for (int i = 0; i < n; i++)
        {
            b[int(a[i][j] - 'A')]++;//这一步很巧妙哦,大家可以学习一下,细细品味
        }
        for (int i = 0; i < 4; i++)
        {
            cout << fixed << setprecision(2) << b[i] / n << " ";//然后输出
        }
        cout << endl;
    }
    return 0;
}

知识点总结:

  1. 二维数组的使用
  2. 数组的巧妙利用

关于代码里面那个b[int(a[i][j]-‘A’)]++;,在这里和大家解释一下,如果字符为’A’,那么就对其和’A’进行ASCII码运算,得到的ASCII码为0,然后类型转换成int类型,这样就可以使得b[0]++;,其他字母同理,这个用法其实普遍运用于统计字符串中各个字母出现的个数,大家可以学一下,以后一定用的上!
嘿嘿,今天和我的目标聊了一会儿,感觉还行,但不知道实际行不行,一切都还是未知。
好了,每篇题解后面都附上一句话。

抽烟的人永远闻不到自己身上的烟味
就像被爱的人永远不知道爱你的人有多辛苦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值