T1 格式改写
题目描述
给定一个仅由拉丁字符组成字符序列,需要改写一些字符的大小写,使得序列全部变成大写或全部变成小写,请统计最少修改多少个字符才能完成这项任务。
输入格式
一个字符序列:保证仅由拉丁字符构成
输出格式
单个整数:表示最少修改次数
数据范围
设输入的字符数量为 n,则保证 1≤n≤100,000
样例数据
输入:
TheQuickBrownFoxJumpsOverTheLazyDog
输出:
9
说明:
将大写改小写
分析
题意
将整个字符串改为大写或小写,输出最小修改次数
思路
将整个字符串查一遍,记录其中大写和小写字母的个数,输出最小值
代码
#include <bits/stdc++.h>
using namespace std;
string s;
int main(){
getline(cin, s);
int len = s.size();
int t = 0, l = 0;
for (int i = 0; i < len; i++){
if (islower(s[i]))
l++;
else
t++;
}
cout << min(t, l) << endl;
return 0;
}
T2 倍数统计
题目描述
给定整数 a, b 与正整数 c,求出在 a 到 b 之间(包含 a 与 b)有多少整数是 cc 的倍数。
输入格式
第一行:两个整数 a 与 b;
第二行:单个正整数 c。
输出格式
单个整数:表示答案。
数据范围
-109≤a≤b≤109
1≤c≤109
样例数据
输入:
4 6
5
输出:
1
分析
题意
输出a~b中c的倍数
思路1
从a循环到b,记录c倍数的个数,但数据量太大,会超时。
思路2
假设a~b中有个数n是c的倍数,那么n+c一定也是c的倍数。
那么我们可以先循环找到从a开始第一个c的倍数n,再求出n~b中有几个c。
代码
#include <bits/stdc++.h>
using namespace std;
long long a, b, c;
int main(){
cin >> a >> b >> c;
int num, ans = 1;
for (int i = a; i <= b; i++)
if (i % c == 0){
num = i;
break;
}
ans += (b - num) / c;
cout << ans << endl;
return 0;
}
T3 区间的并
题目描述
给定一个数轴上的 n 个闭区间,第 i 个闭区间的两端点为 [ a i , b i ] [a_i,b_i] [ai,bi],它们的并集可以表示为若干不相交的闭区间,请按照左端点从小到大的顺序输出这些区间的并集。
输入格式
第一行:单个整数 n;
第二行到第 n+1 行:每行两个整数 a i a_i ai 与 b i b_i bi 表示一个闭区间 [ a i , b i ] [a_i,b_i] [ai