2024年合肥市科普日小学组市赛第一题题解

9304:数字加密(encrypt)(1)
【问题描述】
在信息科技课堂上,小肥正在思考“数字加密”实验项目。项目需要加密n个正整数,对每一个正整数x加密的规则是,将x的每一位数字都替换为x的最大数字。例如,x = 2024,最大数字是4,加密后为4444;x = 168,最大数字是8,加密后为888。
小肥需要计算出n个正整数加密后的总和。
【输入】
输入的第一行包含一个正整数n,表示需要加密的正整数个数。
接下来n行,每行包含一个需要加密的正整数x。
【输出】
输出一行,其中包含一个正整数,为n个正整数加密后的总和。
【数据范围】
对于所有测试数据,保证:1 ≤ n ≤ 1000,1 ≤ x ≤ 1000。
【输入样例】
5
10
2
31
14
53
【输出样例】
145

题解

#include<bits/stdc++.h> 
using namespace std;
int main()
{
    int n,a,h=0;
    cin>>n;
    while(n--)
    {
        int maxn=0,cnt=0;
        cin>>a;
        while(a)
        {
            maxn=max(maxn,a%10);
            cnt++;
            a=a/10;
        }
        int tmp=0;
        for(int i=1;i<=cnt;i++)
        {
            tmp*=10;
            tmp+=maxn;
        }
        h+=tmp;
    }
    cout<<h<<endl;
}

合肥市第41届信息学竞赛(2024C++题解如下: ### 目1:数组排序 **目描述**:给定一个包含N个整数的数组,要求对数组进行升序排序。 **题解**: 可以使用C++标准库中的`std::sort`函数对数组进行排序。`std::sort`默认是升序排序。 ```cpp #include <iostream> #include <algorithm> int main() { int N; std::cin >> N; int arr[N]; for (int i = 0; i < N; ++i) { std::cin >> arr[i]; } std::sort(arr, arr + N); for (int i = 0; i < N; ++i) { std::cout << arr[i] << " "; } return 0; } ``` ### 目2:字符串匹配 **目描述**:给定一个主字符串和一个模式字符串,判断模式字符串是否在主字符串中出现。 **题解**: 可以使用C++标准库中的`std::string`类的`find`方法来判断模式字符串是否在主字符串中出现。 ```cpp #include <iostream> #include <string> int main() { std::string mainStr, pattern; std::cin >> mainStr >> pattern; if (mainStr.find(pattern) != std::string::npos) { std::cout << "Pattern found" << std::endl; } else { std::cout << "Pattern not found" << std::endl; } return 0; } ``` ### 目3:图的最大连通分量 **目描述**:给定一个无向图,求图的最大连通分量的大小。 **题解**: 可以使用深度优先搜索(DFS)来求解图的最大连通分量。 ```cpp #include <iostream> #include <vector> #include <algorithm> void dfs(int node, const std::vector<std::vector<int>>& adj, std::vector<bool>& visited, int& count) { visited[node] = true; ++count; for (int neighbor : adj[node]) { if (!visited[neighbor]) { dfs(neighbor, adj, visited, count); } } } int main() { int N, M; std::cin >> N >> M; std::vector<std::vector<int>> adj(N + 1); for (int i = 0; i < M; ++i) { int u, v; std::cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } std::vector<bool> visited(N + 1, false); int maxSize = 0; for (int i = 1; i <= N; ++i) { if (!visited[i]) { int count = 0; dfs(i, adj, visited, count); maxSize = std::max(maxSize, count); } } std::cout << maxSize << std::endl; return 0; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值