问题60 2021华数之星复赛小高组第7题

邱福星      约1517字 0次阅读

PDF下载

将任意两个正整数$a$和$b$依次输入到程序中,程序将按照以下步骤执行:

步骤$1$:令$q$的值等于$0$;

步骤$2$:当$a<b$时,依次输出$q$和$a$的值,结束整个程序;否则将原来的$a$替换为$a-b$作为$a$,并且将$q$的值增加$1$作为$q$;当$a-b<b$时,依次输出$q$和$a$,否则重复执行步骤$2$.

现在向程序依次输入正整数$122$和$7$,请问程序输出$q$的值是_______,$a$的值是_______.

解析

第一步将$q$的值初始化为$0$,第$2$步开始做对比,如果$a<b$,输出$q$和$a$的值,结束整个程序,现在显然$a\geq b$,那么$a$将变成$122-7=115$,$q=1$,并且判断$a-b$是否小于$b$,如果不是,重复执行步骤$2$,那么$115$继续减$7$,其实到这里就可以看出来是一直减下去,直到$a-b<b$,$122\div 7=17\cdots 3$,但是到第$16$次时,$a=122-16\times 7=10$,此时$a-b=10-7=3<b$的,那么应该输出$q=16$,$a=10$,不会再往下循环了,因此最终程序输出的$q=16$,$a=10$.

这是$2021$年$3$月$13$日考的华数之星复试小高组最后一道附加题,应该是第一次出现编程题,这个题本身不算特别难,但是挺有意思的,逻辑不是很强的做起来还是有难度的,如果看懂了题目在干什么,哪怕不会编程,也是可以做的,但是如果浮躁的同学可能就会刚好掉进出题人挖的坑里面,有同学可能看出来了这是在辗转相减,所以没有多加考虑就直接$122\div 7=17\cdots 3$,认为$q=17$,$a=3$,但其实最后少了一步,这波出题人在大气层,当然如果本身有编程的思想,这道题还是比较轻松能解决的。

下午用编程验证了一下,果然是对的,附一下源代码,已经近$10$年没有碰C++了,但是编程的大体思想还在,查询了一下C++语言的基础语法,编写了一个小程序,仅供参考,其中为了方便处理,直接声明了变量$a$和$b$,没有输入,欢迎学过编程的同学或者其他高手来写一下程序!

C++源代码
#include<iostream>
using namespace std;
int main()
{
    int q=0, a=122, b=7;

    while(a-b>=b)
    {
        if(a<b){
            cout << "q的值:" << q <<endl;
            cout << "a的值:" << a <<endl;
            return 0;
    	}
        else{
            a=a-b;
            q=q+1;
        }
    }
    cout << "q的值:" << q <<endl;
    cout << "a的值:" << a <<endl;
    return 0;
}
  • 作者:邱福星
  • 版权:部分题目来自网络,如有侵权,请联系删除
  • 留言区

    请叫我皮老师
    公告
    本站评论区支持上传图片(等待几秒上传完毕再发送)、支持$\LaTeX$公式,使用QQ邮箱可以显示头像,欢迎做题!
    手机访问
    添加微信

    相关文章: