加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

同学转给我看的c++题目

(2022-09-26 13:49:18)
分类: 研究-学习
汤同学是我上教育硕士时的同学,现在在张家港一所小学工作。前几天联系我,问我c++学的怎样,我说现在高中基本都用的python语言,对其他不太了解。她说张家港组织了信息技术教师培训,她基本没时间和精力学习,怕到时候考试有难处。我答应她到时候可以请同事大神们帮忙解决。
周六晚上,汤同学把考试网址发给了我,一共是4道选择题四道编程题,时间2个半小时。
因为他们是连续在线式培训,针对的也是零基础学员,题目不是太难。不过我做第一道选择题时就被搞卡壳了。程序有点长,而且人家提示自己尝试理解,不要输入代码运行得出结果。
选择题1:
# include
using namespace std;
int main(){
   int n,m;
   cin>>n>>m;
   for (int i=0;i
       for (int i=0;i
           if(i==j){
               cout<<"1";
               } else if (i==0){
                   cout<<"2";
                   }else{
                       cout<<"3"
                       }
           }
       }
    }
'''如果输入是5,4,输出是
133
313
331
'''
回过头来发现,这题我当时做错了。其实这个题目真的不难。当时不能肯定的就是如果既满足条件1又满足条件2是不是按照代码从上往下运行的顺序都判断一次并给出结果呢?
当时犹豫不决,没有找到正确的结果。
今天用python尝试了一下。看到结果时我恍然大悟。
#python
a=5
if a>3:
    print('1')
elif a>4:
    print('2')
else:
    print('3')

这如果用分支结构的流程图来看,很容易就能理解并给出正确结果。因为分支结构不论有几个分支,找到合适的分支条件后都是直接跳出这个分支结构的。
同学转给我看的c++题目

看来通过流程图的形式应该最简单直接明了了。
而且这也是计算思维外显化的直观体现。

===============


1、给定一个n,画一个大小为n的平行四边形。如图所示:
输入格式:
输入一行,包含一个整数n(1
输出格式:
输出如上图所示,共n行。
同学转给我看的c++题目
【沈大业在学习这部分内容时我也跟着听课了,还记得王老师当时上课的分析。可今天再让我单独去做,抛开对c++的基本格式外不熟悉之外,怎么分解这个图形,还真是无处下手。
沈大业当时在写作业,我把他拉过来解围,正好也看看他学习的效果。
他用方框代替空格,补全了上面的图形,然后用几个循环语句实现。主要分为四块。第一行和最后一行单独绘制,第2到6行分为四个部分,空格、#、*、#,其中空格用到循环变量n-i进行控制。
能把这个图分解出来,我认为这也是计算思维的一种能力的体现吧。】

2、蒜头君最近学了编程,在家想算一下自己家每个月所用自来水的费用,已知该费用计价规则如下:
每月用水不超过15立方米,水价5元/立方米
每月用水在15到25立方米之间,水价7元/立方米
每月用水超过25立方米,水价9元/立方米
现在已知一年中每个月的用水量,请计算一年的水费是多少?
输入格式包含12行,每一行都是两个数:m(1<=m<=12)表示月份,flow(1.0<=flow<=100.0)表示该月份的用水量。保证每个月份不会重复。
输出格式:
输出只有一行,包含1个数,表示一年的水费(结果保留两位小数)。
【在做这个题时,对于输入的月份忽略不作处理,我还“请教”了大业,他说到直接忽略这个变量即可。这里面还有一个细节问题,就是保留小数点后两位数字,输出格式控制。他也不太记得,到网上查询 ,cout>>fixed()>>setprecision(2)<<sum。
还有一个问题就是实数类型的定义,用double表示】
#include  
#include  
#include
using namespace std;
int main(){
    int m;
    double flow,a,sum=0;
    for(int i=1;i<=12;i++){
        cin>>m>>flow;
        if (flow<=15)
            a=flow*5;
        else
            if(flow>15 and flow<=25)
                a=flow*7;
            else
                a=flow*9;
        sum=sum+a;        
    }
  cout>>fixed()>>setprecision(2)<<sum;
    return 0;   
}

3、蒜头君的小伙伴为了庆祝他们的友谊决定送给蒜头君一个宝箱,宝箱上有一个时间锁,共有六位数字,形式如hh:mm:ss。
小伙伴知道蒜头君会编程,所以给了蒜头君一个当前时间,和一个秒数,希望蒜头君用编程算出当前时间经过所给秒数后的时间是多少?算出正确的时间输入进时间锁内即可打开友谊的宝箱。
输入格式:包含2行。
第一行包含3个参数:hour(0<=hour<24)表示小时;minute(0<=minute<60)表示分钟;second(0<=second<60)表示秒。该行表示小伙伴给蒜头君的当前时间。
第二行包含1个整数:time(1<=time<=1000000)表示给蒜头君的秒数。
输出格式:
输出只有1行,包含3个数,形式是hh:mm:ss,表示所求当前时间经过所给秒数后的时间。
样例输入:
00 00 00
14400
样例输出:
04:00:00

【在做这道题时,思维经过三次碰撞,也就是经过了三次迭代。第一次就是输入的秒数如何转化为时分秒的问题。转化出时很容易想到,t/3600,在c++中没有整除的概念,只要一开始定义为整数类型即可。但是这个“分”单位如何计算呢?如果直接用数学的思想,应该就是(t-(t/3600)*3600)/60,如果这个还算容易推出的话,那到了秒就更加复杂了。联想到编程运算符的整除和取模,这个问题就迎刃而解了。对于分:t600/60,对于秒,t%(3600*60),把t分解成时分秒的运算就完成了。但进入到下一步的时候就遇到了问题:计算得出的时分秒与原来的时分秒相加,如果需要进位怎么办呢?引出第二个问题。
如何设置进位,需要用到if...else吗?如果分再要进位,怎么把秒的计算结果带过来呢?越想越复杂。怎么办?
(后来我把沈大业拉过来,假意请他帮忙,他也基本按照之前分析的思路,遇到了这个问题。看来这是基本的大众化的思路,都需要在不断训练中提高自己的认识,避开弯路)
我用逆向思维,把一开始的时分秒整体转换成秒数t',和第二行的t相加后,再进行时分秒运算,很好的避开了进位判断的问题。
最后一次是输出格式的问题(都是两位数,不足补0),一开始我还没有意识到这个问题,还想着用上一题的setprecision(n)来解决,没有效果后发现它仅是用于保留小数位数的。
和沈大业一起思考,他想到了当初学习时的占位符,但又不记得具体如何表示了。网上查询,就是setw(n)。一开始以为第四题有难度搞不出来,这题有了思路后完成时间会绰绰有余,所以中途我经过和儿子的讨论、出门拿快递等,不慌不忙地耽误了一些时间。这题在调试时出现了小问题,导致最终慌慌忙忙就提交了,是否真正实现功能还未知。

4、工厂生产了一批零件,其中包含一些重量不符合要求的不合格零件,请你用程序帮工厂将这些不合格零件找出来吧。
输入格式:
输入有三行:
第一行一个正整数n(1<=n<=100000),表示零件的总个数;
第二行n个实数m(1.0<=m<=100.0),表示每个零件的重量;
第三行有两个实数x(1.0<=x<=100.0)和y(1.0<=y<=100.0),表示重量在x和y之间(可以等于x或y)的零件是合格的。
输出格式:
输出所有不合格零件的编号,每个编号占一行。
样例输入:
5
20.0 30.0 28.0 32.0 39.0
23.0 45.0
样例输出
1

【我对数组不熟悉,有天然的恐惧感。因为最后输出的是编号而不是具体的值,所以知道应该会用到数组。便决定放弃了。知道沈大业已经学到了数组的知识,交卷后让他看下题目,他说这个不难。输入和判断的时候用a[i],最终输出结果时用i就可以了,属于这几题中最简单的了。
哎,我这算是一叶蔽目啊!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有