[ACM-C#-python3]ACM水题集

本文解析了多个编程挑战题目,涉及数字处理、字符串操作、日期计算等,提供了Python、C#及C++等多种语言的实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SDUT-3769 分隔

Problem Description

给出一个正整数,将这个正整数分割成 2 个数,怎样分割才能使分成的两个数的和最大呢?请你求出最大的和。

Input

输入数据有多组(数据组数不超过 100),到 EOF 结束。

对于每组数据,输入一行,包含 1 个整数 n (10 <= n <= 10^1000)。

Output

对于每组数据,输出一行,包含 1 个整数,表示分割成的两个数的最大和。


最早用C++写了半天判断...干脆用python试了一下暴力,C++同样暴力应该更快一些,不过可能没有python这样优雅了...

max([int(a[0:i]) + int(a[i:]) for i in range(1,len(a))])
将一个数从第一位开始挨个分割加了一遍取出最大值...
while True:
    try:
        a = input()
        print(max([int(a[0:i],10) + int(a[i:],10) for i in range(1,len(a))]))
    except EOFError:
        break

SDUT-1123 阶乘

Problem Description

从键盘输入任意一个大于等于0的整数n,然后计算n的阶乘,并把它输出。

提示: 0!是 1 。

Input

输入任意一个大于等于0的整数n。

Output

输出n!

Console.WriteLine(Enumerable.Range(1, int.Parse(Console.ReadLine())).Aggregate(1, (sum, next) => (sum * next)));


using System;
using System.Collections.Generic;
using System.Linq;

namespace QwQ {
    class StdIO {
        static void Main(string[] args) {
            Console.WriteLine(Enumerable.Range(1, int.Parse(Console.ReadLine())).Aggregate(1, (sum, next) => (sum * next)));
        }
    }
}

int n = int.Parse(Console.ReadLine());
IEnumerable<int> list = Enumerable.Range(1, n);
int ans = list.Aggregate(1, (sum, next) => (sum *= next));
Console.WriteLine(ans);




SDUT-1235 计算球体积

Problem Description
根据输入的半径值,计算球的体积。
Input
输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。
Output
输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。
使用const定义常量,使用F来精确小数位数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QwQ {
    class Program {
        static void Main(string[] args) {
            while(true) {
                Console.WriteLine("{0:F3}", V(double.Parse(Console.ReadLine())));
            }
            Console.ReadKey();
        }
        public static double V(double r) {
            return 4.0 / 3.0 * PI * r * r * r;
        }
        public const double PI = 3.1415927; //定义常量
    }
}


SDUT - 4127 喵帕斯之短笛

Problem Description

 

莲酱非常喜欢他的短笛,这次莲酱听到了一段很好听的音乐,但是莲酱想知道他的数字简谱怎么写,所以这个任务就交给你来完成了,输入一行字符串,只包含 "do re mi fa so la xi"。(do re mi fa so la xi 分别对应数字 1 2 3 4 5 6 7)

现在给出一个乐谱,请把他转化成莲酱需要的简谱。

Input

多组输入直到EOF。(组数小于100)

每组数据首先输入一个 N 代表接下来输入 N 个音符,接下来输入 N 个音符(只出现 do re mi fa so la xi)并且每个每个音符以空格隔开。(1 <= N <= 100)

Output

每组数据输出一行,为转化后乐谱,只出现 1 2 3 4 5 6 7 并以空格隔开。

python版 -- 将list转为string后replace替换

while True:
    try:
        input()
        print(str(input().split()).replace('do','1').replace('re','2').replace('mi','3').replace('fa','4').replace('so','5').replace('la','6').replace('xi','7').replace(',','').rstrip(']').lstrip('[').replace("'",""))
    except EOFError:
        break

C#版: --使用字典容器映射要转换的字符,将输入的string按空格分割后转换为字典映射后的string存入List容器,再使用String.Join方法将List转换为按空格分隔的string并输出(QwQ解释起来才发现好拗口噗...

Console.WriteLine(String.Join(" ", new List<string>(Console.ReadLine().Split()).ConvertAll(i => dic[i])));

using System;
using System.Collections.Generic;
using System.Linq;

namespace QwQ {
    class StdIO {
        static void Main(string[] args) {
            Dictionary<string, string> dic = new Dictionary<string, string>(){
                { "do","1"},{ "re","2"},{ "mi","3"},{ "fa","4"},{ "so","5"},{ "la","6"},{ "xi","7"}
            };
            while(true) {
                Console.ReadLine();
                Console.WriteLine(String.Join(" ", new List<string>(Console.ReadLine().Split()).ConvertAll(i => dic[i])));
            }
        }
    }
}

SDUT-4134 皮卡丘的叫声是?

Problem Description

 

皮卡丘的叫声大家听过吗?当然是“pika”,“pikapi”,“pikachu”,“pikapika”等等,其中“pikapi”指的是小智哦(不要问我为什么懂皮卡丘语),现在皮卡丘说了好长一段话,请你找出皮卡丘叫了多少次“pikachu”。

Input

输入数据有多组,到EOF结束。

每组数据输入一段皮卡丘的叫声,叫声用字符串来表示,字符串中含逗号,不含空格,长度不超过1000。

Output

对于每组输入,输出一个整数n,表示叫声中“pikachu”的数量。

字符串统计固定字串数量,python和C#都比较方便

python :

print(input().count("pikachu"))

C# 需要包含命名空间System.Text.RegularExpressions(正则表达式)

Console.WriteLine(Regex.Matches(Console.ReadLine(), "pikachu").Count);

while True:
    try:
        print(input().count("pikachu"))
    except EOFError:
        break
using System;
using System.Text.RegularExpressions;
namespace QwQ {
    class StdIO {
        static void Main(string[] args) {
            while(true) {
                Console.WriteLine(Regex.Matches(Console.ReadLine(), "pikachu").Count);
            }
        }
    }
}

C++ STL 同样在查找固定字串时也比较方便:

#include <bits/stdc++.h>
using namespace std;
int main(){
    std::ios::sync_with_stdio(false);
    string s;
    while(cin >> s){
        int pos = -1,cnt = 0;
        while((pos = s.find("pikachu",pos+1))!=string::npos){
            cnt ++;
        }
        cout<<cnt<<endl;
    }
    return 0;
}

SDUT-1177 时间间隔

Problem Description
从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。
如:3点5分25秒应表示为--03:05:25.假设两个时间在同一天内,时间先后顺序与输入无关。
Input
输入包括两行。
第一行为时间点1。
第二行为时间点2。
Output
以“小时:分钟:秒”的格式输出时间间隔。
格式参看输入输出。 


还记得刚开学的时候C语言将单位都化成秒计算再化回时间单位...不过C#有DateTime 可以直接计算

Console.WriteLine((Convert.ToDateTime(Console.ReadLine())- Convert.ToDateTime(Console.ReadLine())).ToString().Trim('-'));

将2行输入分别convert转为DateTime型,再将相减得到的TimeSpan型数据转为string,使用Trim方法去掉string开头的 -(防止出现负号)

using System;
using System.Collections.Generic;
using System.Linq;
namespace QwQ {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine((Convert.ToDateTime(Console.ReadLine())- Convert.ToDateTime(Console.ReadLine())).ToString().Trim('-'));
        }
    }
}

SDUT-1160 C语言实验-某年某月的天数

Problem Description
输入年和月,判断该月有几天?
Input
输入年和月,格式为年\月。
Output
输出该月的天数。


这道题C#可以使用DateTime的DaysInMonth方法(emmm...)

DateTime.DaysInMonth(Year,Month)

using System;
using System.Collections.Generic;
namespace QwQ {
    class Program {
        static void Main(string[] args) {
            List<int> a = new List<string>(Console.ReadLine().Split('\\')).ConvertAll(i => int.Parse(i));
            Console.WriteLine(DateTime.DaysInMonth(a[0], a[1]));
        }
    }
}

1 图论 3 1.1 术语 3 1.2 独立、覆盖、支配之间关系 3 1.3 DFS 4 1.3.1 割顶 6 1.3.2 桥 7 1.3.3 强连通分量 7 1.4 最小点基 7 1.5 拓扑排序 7 1.6 欧拉路 8 1.7 哈密顿路(正确?) 9 1.8 Bellman-ford 9 1.9 差分约束系统(用bellman-ford解) 10 1.10 dag最短路径 10 1.11 二分图匹配 11 1.11.1 匈牙利算法 11 1.11.2 KM算法 12 1.12 网络流 15 1.12.1 最大流 15 1.12.2 上下界的网络的最大流 17 1.12.3 上下界的网络的最小流 17 1.12.4 最小费用最大流 18 1.12.5 上下界的网络的最小费用最小流 21 2 数论 21 2.1 最大公约数gcd 21 2.2 最小公倍数lcm 22 2.3 快速幂取模B^LmodP(O(logb)) 22 2.4 Fermat小定理 22 2.5 Rabin-Miller伪素数测试 22 2.6 Pollard-rho 22 2.7 扩展欧几里德算法extended-gcd 24 2.8 欧拉定理 24 2.9 线性同余方程ax≡b(mod n) 24 2.10 中国剩余定理 25 2.11 Discrete Logging(BL == N (mod P)) 26 2.12 N!最后一个不为0的数字 27 2.13 2^14以内的素数 27 3 数据结构 31 3.1 堆(最小堆) 31 3.1.1 删除最小值元素: 31 3.1.2 插入元素和向上调整: 32 3.1.3 堆的建立 32 3.2 并查 32 3.3 树状数组 33 3.3.1 LOWBIT 33 3.3.2 修改a[p] 33 3.3.3 前缀和A[1]+…+A[p] 34 3.3.4 一个二维树状数组的程序 34 3.4 线段树 35 3.5 字符串 38 3.5.1 字符串哈希 38 3.5.2 KMP算法 40 4 计算几何 41 4.1 直线交点 41 4.2 判断线段相交 41 4.3 三点外接圆圆心 42 4.4 判断点在多边形内 43 4.5 两圆交面积 43 4.6 最小包围圆 44 4.7 经纬度坐标 46 4.8 凸包 46 5 Problem 48 5.1 RMQ-LCA 48 5.1.1 Range Minimum Query(RMQ) 49 5.1.2 Lowest Common Ancestor (LCA) 53 5.1.3 Reduction from LCA to RMQ 56 5.1.4 From RMQ to LCA 57 5.1.5 An algorithm for the restricted RMQ 60 5.1.6 An AC programme 61 5.2 最长公共子序列LCS 64 5.3 最长上升子序列/最长不下降子序列(LIS) 65 5.3.1 O(n^2) 65 5.3.2 O(nlogn) 66 5.4 Joseph问 67 5.5 0/1背包问 68 6 组合数学相关 69 6.1 The Number of the Same BST 69 6.2 排列生成 71 6.3 逆序 72 6.3.1 归并排序求逆序 72 7 数值分析 72 7.1 二分法 72 7.2 迭代法(x=f(x)) 73 7.3 牛顿迭代 74 7.4 数值积分 74 7.5 高斯消元 75 8 其它 77
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值