关于实验2-批量处理数据程序设计的感悟

关于这个实验2,考察的知识点不难,就是有关一维数组、二维数组、字符串的知识。题目难度上中等偏上(对于一个初学程序设计的student来说),很综合全面地考察了对一维数组、二维数组、字符串的理解。

A题(有序数列插入数)考察有序数列的插入排序,涉及一维数组的使用,难度不大。

B题(十进制转二进制)考察将十进制通过循环除二取余并将余数存储在数组中,将数组反向输出从而“转换”成二进制,难点在于对于负数的处理,可以通过先将十进制数字“转换”成二进制,最后在二进制结果前面填上一个负号实现。

C题(矩阵对角线求和)考察二维数组及位于矩阵主副对角线上的元素位置上的规律的理解。对于3*3矩阵主对角线上的元素,其所在的行数等于其所在的列数,而对于矩阵副对角线上的元素,其所在的行数与列数之和为一定值2(即3-1,对于n*n的矩阵副对角线上的元素其行数与列数之和为n-1),从而解决问题。

D题(井字棋)考察二维数组及对题意的理解。我的方法是分情况逐个元素判断并使用状态变量flag对“No winner”的特殊情况进行判断。
先简述一下题目:
KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。 
输入描述: 三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。 
输出描述: 如果KiKi获胜,输出“KiKi wins!”; 如果BoBo获胜,输出“BoBo wins!”; 如果没有获胜,输出“No winner!”。
我写的代码:
#include <iostream>
using namespace std;
int main() 
{
    char a[3][3];
    int i,j,flag=0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            cin>>a[i][j];
        }
    }
    for(i=0;i<3;i++)
    {
        if(a[i][0]==a[i][1]&&a[i][1]==a[i][2]&&a[i][0]!='O')
        {
            if(a[i][0]=='K')
            {
                cout<<"KiKi wins!"<<endl;
            }else
            {
                cout<<"BoBo wins!"<<endl;
            }
            flag=1;
            break;
        }
        if(a[0][i]==a[1][i]&&a[1][i]==a[2][i]&&a[0][i]!='O')
        {
            if(a[0][i]=='K')
            {
                cout<<"KiKi wins!"<<endl;
            }else
            {
                cout<<"BoBo wins!"<<endl;
            }
            flag=1;
            break;
        }
    }
    if(a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&a[0][0]!='O')
    {
        if(a[0][0]=='K')
        {
            cout<<"KiKi wins!"<<endl;
        }
        else{
            cout<<"BoBo wins!"<<endl;
        }
        flag=1;
    }
    if(a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&a[0][2]!='O')
    {
        if(a[0][2]=='K')
        {
            cout<<"KiKi wins!"<<endl;
        }else
        {
            cout<<"BoBo wins!"<<endl;
        }
        flag=1;
    }
    if(flag==0) cout<<"No winner!"<<endl;
    return 0;
}

虽然很麻烦,但实在没想出好的方法。

E题(字符串连接)考察字符串/字符数组的使用及有关字符串的知识。由两个字符串合并组成的新字符串末尾没有结束符‘\0’,需要填上‘\0’作为结束符。

F题(文章统计:有一篇文章,共有三行文字,每行有80个字符,要求分别统计出英文大写字母,小写字母,数字,空格以及其他字符的个数)考查字符串/字符数组的使用及有关字符串的知识。需要注意的是gets函数在无指令的情况下只能读取并输入一行字符串,只有在有循环的前提下才能读取多行字符串,如定义一个char型的字符数组str[3][100],则需用一个for循环,定义一个循环变量i,使得gets函数能够逐行读取字符串并输入字符串:gets(str[i])


全部评论

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
家人们,我现在真的好纠结。我是26届的,目前还没有实习过。我现在的情况是,想参加秋招,但是感觉自己的简历特别空,没有实习经历会不会秋招直接凉凉啊?可我又听说现在很多公司对26届实习生也不太感冒,说什么不确定性大。而且我最近在准备考公,时间上也有点冲突。要是把时间花在实习上,备考时间就少了。但要是不实习,又怕以后就业有问题😫有没有懂行的友友帮我分析分析:26届现在不实习,秋招找工作真的会很难吗?考公和实习该怎么平衡啊?如果现在不实习,考完公再去找实习还来得及吗?真的太焦虑了,希望大家能给我点建议🙏
小破站_程序员YT:我可能和大家的观点不一样。人的精力是有限的,不能既要还要。你又想实习又想考公最后又要秋招上岸,我觉得哪有那么多的选择。你如果想考上岸,那就全力以赴。如果想秋招上岸,就继续投实习,投没了,就继续准备秋招,秋招不行继续春招。别到最后,考公没上岸,觉得是花了时间浪费在找实习上了, 秋招没上岸,觉得是浪费时间准备考公去了。我是认为很难说可以去平衡 不喜勿喷,可以叫我删除
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务