About GESP202409 二级题解 数位之和 小杨的 N 字矩阵

目录

1. 数位之和

题目描述

解题思路

代码实现

注意

2. 小杨的 N 字矩阵

题目描述

解题思路

代码实现

注意

无注释满分代码

问题1:数位之和

问题2:小杨的 N 字矩阵


1. 数位之和

题目描述

题目链接
给定 n 个正整数,判断每个数的各位数字之和是否为 7 的倍数。

解题思路

  1. 剥洋葱法:逐位取出数字的每一位,累加求和。

  2. 模运算判断:若数位和 sum % 7 == 0,输出 Yes,否则输出 No

代码实现

#include<bits/stdc++.h>
using namespace std;
long long n, a;

int main() {
    cin >> n;
    while (n--) {
        cin >> a;
        int sum = 0;
        while (a > 0) {
            sum += a % 10; // 取个位累加
            a /= 10;       // 去掉个位
        }
        cout << (sum % 7 == 0 ? "Yes" : "No") << endl;
    }
    return 0;
}

注意

  • 变量重置:每个数字处理前需将 sum 重置为 0

  • 输出格式:严格输出 Yes/No,注意大小写和换行。


2. 小杨的 N 字矩阵

题目描述

题目链接
输入整数 m,输出一个 m×m 的矩阵,满足以下条件:

  1. 每行首尾为 +

  2. 除首行和末行外,每行中间有一个 +

  3. 其余位置填充 -

解题思路

  1. 首尾固定:每行首尾输出 +

  2. 中间逻辑

    • i 行的中间 + 位于第 i 列(从 2i-1 填充 -)。

    • 从中间 + 到末尾 + 之间填充 -

代码实现

#include<bits/stdc++.h>
using namespace std;
int m;

int main() {
    cin >> m;
    for (int i = 1; i <= m; i++) {
        cout << '+';
        // 输出前半部分 '-'
        for (int j = 2; j < i; j++) cout << '-';
        // 中间 '+'
        if (i != 1 && i != m) cout << '+';
        // 输出后半部分 '-'
        for (int j = 1; j < m - i; j++) cout << '-';
        cout << '+' << endl;
    }
    return 0;
}

注意

  • 首尾行处理:首行和末行中间无 +

  • 对称性:确保每行的 +- 分布对称。


无注释满分代码

问题1:数位之和

#include<bits/stdc++.h>
using namespace std;
long long n,a;
int main(){
    cin>>n;
    while(n--){
        cin>>a;
        int sum=0;
        while(a>0){
            sum+=a%10;
            a/=10;
        }
        cout<<(sum%7?"No":"Yes")<<endl;
    }
    return 0;
}

问题2:小杨的 N 字矩阵

#include<bits/stdc++.h>
using namespace std;
int m;
int main(){
    cin>>m;
    for(int i=1;i<=m;i++){
        cout<<'+';
        for(int j=2;j<i;j++)cout<<'-';
        if(i>1&&i<m)cout<<'+';
        for(int j=1;j<m-i;j++)cout<<'-';
        cout<<'+'<<endl;
    }
    return 0;
}

总结

  1. 数位之和:剥洋葱法提取数位,模运算判断条件。

  2. N 字矩阵:通过循环控制每行的符号分布,注意首尾行特殊处理。

原文链接GESP202409二级题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值