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

4 篇文章 0 订阅
3 篇文章 0 订阅

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]));
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值