欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

2023年 9月 GESP C++ 二级真题解析 编程题

时间:2024-05-21 14:07 作者:lizq 点击:
三、编程题(每题 25 分,共 50 分) 1、⼩杨的 X 字矩阵 问题描述 ⼩杨想要构造⼀个 N×N 的 X 字矩阵(N 为奇数),这个矩阵的两条对角线都是半角加号+,其余都是半角减号-。例如,⼀

三、编程题(每题 25 分,共 50 分)

1、⼩杨的 X 字矩阵
问题描述
⼩杨想要构造⼀个 N×N 的 X 字矩阵(N 为奇数),这个矩阵的两条对角线都是半角加号+,其余都是半角减号-。例如,⼀个 5×5 的 X 字矩阵如下:

+---+
-+-+-
--+--
-+-+-
+---+

请你帮⼩杨根据给定的 N 打印出对应的“X 字矩阵”。

输入描述
⼀⾏⼀个整数 N(5≤N≤49,保证 N 为奇数)。
输出描述
输出对应的“X 字矩阵”。
请严格按格式要求输出,不要擅⾃添加任何空格、标点、空⾏等任何符号。你应该恰好输出 N⾏,每⾏除了换⾏符外恰好包含 N 个字符,这些字符要么是+,要么是-。
样例输入 1

5

样例输出 1

+---+
-+-+-
--+--
-+-+-
+---+

样例输入 2

7

样例输出 2

+-----+
-+---+-
--+-+--
---+---
--+-+--
-+---+-
+-----+

【题目大意】
输入一个 N*N 的矩阵,内容是“+”或者“-”字符,注意N 是一个奇数。注意对角线和斜对角线是“+”。
【考纲知识点】
多层循环结构、基本运算、输入输出语句。
【解题思路】
1.按题目要求定义好需要的变量,并实现输入;
2.最开始所有位置的坐标都设置是“-”字符;
3.对角线坐标是(1,1),(2,2),(3,3)….(n,n);斜对角线是(1,n),(2,n-1),(3,n-2)…..(n,1)。总结规律:需要赋值“+”的坐标是行坐标 i=列坐标 j;斜对角线的坐标和都是n+1;行坐标是 i,纵坐标是 n+1-i,分别赋值即可。
【参考程序】

#include <iostream>
using namespace std;
int main(){
    int n=0;
    cin >>n;
    for(inti=0; i<n; i++){
        for(intj=0; j<n;j++){
            if(i==j || i+j== n-1){
                cout<<"+";
            }else{
                cout<<"-";
            }
        }
        cout<< endl;
    }
    return 0;
}

2、数字⿊洞
问题描述
给定⼀个三位数,要求各位不能相同。例如,352 是符合要求的,112 是不符合要求的。将这个三位数的三个数字重新排列,得到的最⼤的数,减去得到的最⼩的数,形成⼀个新的三位数。对这个新的三位数可以重复上述过程。神奇的是,最终⼀定会得到 495!
试试看,重新排列 352,得到的最⼤数为 532,最⼩数为235,它们的差是297;变换 297,得到 972-279=693;变换 693,963-369=594;变换594,954-459=495。因此,352 经过 4 次变换得到了 495。
现在,输⼊的三位数,你能通过编程得出,这个三位数经过多少次变换能够得到495 吗?
输入描述
输⼊⼀⾏,包含⼀个符合要求的三位数 。
输出描述
输出⼀⾏,包含⼀个整数 ,表⽰经过 次变换得到 。

样例输入 1

352

样例输出 1

4

【题目大意】
输入 1 个三位整数,将该数字拆分,重新组合成最大数字和最小数字,求他们的差,如果不等于 495,就一直操作,直到等于 495 为止。求操作的次数。

【考纲知识点】
循环结构、分支结构、基本运算。
【解题思路】
1.按题目要求定义好需要的变量,并实现输入;
2.将该数字的个位十位百位拆分开,组成最大值和最小值;判断是否等于495,记录操作次数。
【参考程序】

#include <iostream>
using namespace std;

int main(){
    int n=0;
    cin >> n;
    for(int t=0; ;t++){
        if(n==495){
            cout<<t<<endl;
            break;
        }
        int m0 = n%10, m1=n/10%10 , m2=n/100; 
        int tmax = 0, tmin=0;
        if( m0 >= m1 && m1 >= m2)
        {
            tmax = m0 * 100 + m1*10 + m2;
            tmin = m2 * 100 + m1*10 + m0;
        }else if(m0 >= m2 && m2>=m1){
            tmax = m0 * 100 + m2*10 + m1;
            tmin = m1 * 100 + m2*10 + m0;
        }else if(m1 >= m0 && m0 >= m2){
            tmax = m1 * 100 + m0*10 + m2;
            tmin = m2 * 100 + m0*10 + m1;
        }else if(m1 > =m2 && m2 >= m0){
            tmax = m1*100 + m2*10 + m0;
            tmin = m0*100 + m2*10 + m1;
        }else if(m2>=m0&&mo >= m1){
            tmax = m2*100 + m0*10 + m1;
            tmin = m1*100 + m0*10 + m2;
        else{  //m2>=m1 && m1 >= mo
            tmax = m2*100 + m1*10 + m0;
            tmin = m0*100 + m1*10 + m2;
        }
        n = tmax - tmin;
    }
    return 0;
}
        
        
        
        
        
            
            
            
tmin=mO*100+m1 *10 + m2;


(责任编辑:lizq)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%