首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >新生第七周周赛题解

新生第七周周赛题解

作者头像
爱吃大芒果
发布2025-12-24 14:14:16
发布2025-12-24 14:14:16
200
举报

不定期会出周赛题解ovo

作者:爱吃大芒果

个人主页 爱吃大芒果

本文所属专栏 从0到1自学c++

更多专栏


A

题目描述:

从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事,讲的是从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事,讲的是从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事,讲的是...

咦我们的角度看来,他属于是无限递归

现在想请你计算下面这个程序 递归nnn层之后ansansans等于多少(ansansans是全局变量)

C版(java版)

代码语言:javascript
复制
void dfs(int cnt){//cnt从1开始 如同dfs(1)
    for(int i=1;i<=cnt;i++)ans++;
    dfs(cnt+2);
}

python版

代码语言:javascript
复制
def dfs(cnt):
    for i in range(1,cnt+1):
        ans++;
    dfs(cnt+2)
同上 从dfs(1)进入

输入描述:

代码语言:javascript
复制
输入一个数 

输出描述:

代码语言:javascript
复制
输出一个整数

解题思路:

dfs(1) 开始,递归深度 n 是指递归调用的次数(包括第一次调用),每层递归的 cnt 是 1, 3, 5, 7, …(每次加 2),每层循环次数等于 cnt

设递归深度为 n,那么依次的 cnt 为:

cnt1=1,cnt2=3,cnt3=5,…,cntk=2k−1

所以第 k 层循环次数为 2k−1,对 ans 的贡献就是 2k−1。

递归 nn 层后,总增量是:

化简得

所以程序只需要读入 n,输出

即可。

代码实现:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
int main(){
    long long n;//使用long long防止溢出
    cin>>n;
    cout<<n*n<<endl;
    return 0;
}

B

题目描述

输出双层金字塔。

输入描述:

代码语言:javascript
复制
多个测试数据。每个测试数据输入一个整数n( 2 <= n <= 9)

输出描述:

代码语言:javascript
复制
输出双层金字塔

输入

代码语言:javascript
复制
2
5

输出

代码语言:javascript
复制
 *
***
 *
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

解题思路:

对于输入的 n:

  • 上层金字塔高度为 n
  • 下层金字塔高度为 n-1(题目示例中,n=2 时上层 2 层,下层 1 层;n=5 时上层 5 层,下层 4 层)
  • 每行空格数 = 总宽度的一半 - 当前行星号数的一半
  • 总宽度 = 2*n - 1(上层最底层的宽度)

代码实现:

代码语言:javascript
复制
        #include <bits/stdc++.h>
        using namespace std;
        void fct(int n){
            for(int i=1;i<=n;i++){//打印上层金字塔
                for(int j=1;j<=n-i;j++){
                    cout<<" ";//打印空格
                }
           for(int k=1;k<=2*i-1;k++){
               cout<<"*";//打印”*“
           }
            cout<<endl;
        }
            for(int i=n-1;i>=1;i--){//打印下层金字塔层数为n-1
                for(int j=1;j<=n-i;j++){
                    cout<<" ";//打印空格
                }
           for(int k=1;k<=2*i-1;k++){
               cout<<"*";//打印”*“
           }
                cout<<endl;
        }
    }

        int main(){
           int n;
            while(cin>>n){
                fct(n);//函数类型为void所以输出不用cout
            }

            return 0;
        }

C

题目描述:

KiKi想知道从键盘输入的两个数的大小关系,请编程实现。

输入描述:

代码语言:javascript
复制
题目有多组输入数据,每一行输入两个整数(范围~),用空格分隔。

输出描述:

代码语言:javascript
复制
针对每行输入,输出两个整数及其大小关系,数字和关系运算符之间没有空格,详见输入输出样例。

解题思路:

直接读入两个整数比较即可,但是要注意输出">""<""="符号

代码实现:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

int main() {
    int a, b;
    while (cin >> a >> b) {
        if (a == b) cout << a << "=" << b << endl;
        else if (a > b) cout << a << ">" << b << endl;
        else cout << a << "<" << b << endl;
    }
    return 0;
}

D

题目描述:

输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。

数据范围:年份满足 1990≤y≤2015 1990 \le y \le 2015 \ 1990≤y≤2015 ,月份满足 1≤m≤12 1 \le m \le 12 \ 1≤m≤12 ,日满足 1≤d≤30 1 \le d \le 30 \ 1≤d≤30

输入描述:

代码语言:javascript
复制
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。

输出描述:

代码语言:javascript
复制
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。

解题思路:

scanf 按宽度读入,printf 补 0 输出。

代码实现:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

int main() {
    int y, m, d;
    scanf("%4d%2d%2d", &y, &m, &d);
    printf("year=%d\n", y);
    printf("month=%02d\n", m);
    printf("date=%02d\n", d);
    return 0;
}

E

题目描述:

DD给了dddddd一个由小写英文字母组成的字符串,但是dddddd觉得这个串太丑,dddddd觉得一个优美的字符串应该满足任意相邻字符都不相等,她想知道把给定字符串变成一个优美的字符串最少需要插入多少个字符,你只要告诉她,插入最少字符后的串的长度

输入描述:

代码语言:javascript
复制
第一行一个数T(1≤T≤10)
接下来T行,每行一个有且仅有小写英文字母构成的字符串s(1≤|s|≤100000)

输出描述:

代码语言:javascript
复制
输出T行,每行一个数,表示美化后串的最短长度

解题思路:

遍历字符串,如果 s[i] == s[i-1],说明这里需要插入一个字符,结果长度 +1 初始长度为原长,每遇到一次相邻相同,最终长度 +1

代码实现:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    while(n--){//多组输入
       string s;
        cin>>s;
        int result = s.length();//读取字符串长度
         for (int i = 1; i < s.length(); i++) {
            if (s[i] == s[i-1]) {//判断相邻两个字符是否相同
                result++; //如果相同则字符串长度+1
            }
        }
         cout << result << endl;
    }      
    return 0;
}

F

题目描述

给定两个正整数a,b,求a,b的最小公倍数。(即[a,b])

输入描述:

代码语言:javascript
复制
两个整整数,a,b

输出描述:

代码语言:javascript
复制
一个正整数,表示[a,b]

对于输入输出的所有数据,保证不超过unsigned long long(18446744073709551615)

解题思路:

代码实现:

代码语言:javascript
复制
#include <iostream>
using namespace std;
//题目要求使用unsigned long long
unsigned long long gcd(unsigned long long a, unsigned long long b) {
    return b == 0 ? a : gcd(b, a % b);
//等价于if (b == 0) {
    //return a;
//} else {
   // return gcd(b, a % b);
//}
}

int main() {
    unsigned long long a, b;
    cin >> a >> b;
    unsigned long long g = gcd(a, b);
    cout << (a / g * b) << endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • A
    • 题目描述:
    • 输入描述:
    • 输出描述:
    • 解题思路:
    • 代码实现:
  • B
  • 题目描述
    • 输入描述:
    • 输出描述:
    • 解题思路:
    • 代码实现:
  • C
    • 题目描述:
    • 输入描述:
    • 输出描述:
    • 解题思路:
  • 代码实现:
  • D
    • 题目描述:
    • 输入描述:
    • 输出描述:
    • 解题思路:
    • 代码实现:
    • E
    • 题目描述:
    • 输入描述:
    • 输出描述:
    • 解题思路:
    • 代码实现:
  • F
    • 题目描述
    • 输入描述:
    • 输出描述:
    • 解题思路:
    • 代码实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档