A:时间转换(I)
题目描述
输入一个正整数(秒钟),请将其转换成为如下格式:
时:分:秒。输入
单组输入,输入一个正整数表示总秒数。
输出
输出转换之后的时间。
样例输入 Copy
1245样例输出 Copy
0:20:45
#include<stdio.h>
int main()
{
int t,h,f,s;
scanf("%d",&t);
if(t==0)
printf("0:0:0\n");
else
{
s=t%60;
f=((t-s)/60)%60;
h=((t/60-f))/60;
printf("%d:%d:%d\n",h,f,s);
}
return 0;
}
B:数字求和
题目描述
使用递归编写一个程序,计算一个正整数中所有数字之和。例如输入234,输出9。
输入
多组输入,每组输入一个正整数。
输出
输出结果,每个结果占一行。
样例输入 Copy
234样例输出 Copy
9
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 +5;
const int M = 1e9 +7;
const int inf = 0x3fffffff;
int fun(int a)
{
if(a/10==0)
return a%10;
else
return a%10+fun(a/10);
}
void solve(){
int n;
while(cin>>n){
cout<<fun(n)<<"\n";
}
}
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//int t;cin>>t;while(t--)
solve();
return 0;
}
C:一二三
题目描述
你弟弟刚刚学会写英语的一(one)、二(two)和三(three)。他在纸上写了好些一二三,可惜有些字母写错 了。已知每个单词最多有一个字母写错了(单词长度肯定不会错),你能认出他写的啥吗?
输入
第一行为单词的个数(不超过 10)。以下每行为一个单词,单词长度正确,且最多有一个字母写错。所有 字母都是小写的。
输出
对于每组测试数据,输出一行,即该单词的阿拉伯数字。输入保证只有一种理解方式。
样例输入 Copy
3 owe too theee样例输出 Copy
1 2 3
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 +5;
const int M = 1e9 +7;
const int inf = 0x3fffffff;
void solve(){
string s;
cin >> s;
if (s.size() == 5)
{
cout << 3 << '\n';
return;
}
if ((s[0] == 'o' && s[2] == 'e') || (s[0] == 'o' && s[1] == 'n') || (s[1] == 'n' && s[2] == 'e'))
cout << 1 << '\n';
else
cout << 2 << '\n';
}
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t;cin>>t;while(t--)
solve();
return 0;
}
D:三家人
题目描述
有三户人家共拥有一作花园,每户人家的太太均需帮忙整理花园。A太太工作了 5天,B太太则工作了 4天,才将花园整理完毕。C 太太因为正身怀六甲无法加入她们的行列,便出了 90 元。请问这笔钱如何分给 A、B二位太太较为恰当?A应得多少元?
90/(5+4)*5=50元?如果这么想你就上当了!正确答案是 60元。如果没想通的话再想想吧。 下面回答一个一般性的问题:假定 A 太太工作了 x 天,B 太太工作了 y 天,C 太太出了 90 元,则 A太太应得多少元?输入保证二位太太均应得到非负整数元钱。输入
输入第一行为数据组数T( T <=20)。每组数据仅一行,包含三个整数x ,y ,z(1<= x ,y <=10,1<= z <=1000)。
输出
对于每组数据,输出一个整数,即 A太太应得的金额(单位:元)。
样例输入 Copy
2 5 4 90 8 4 123样例输出 Copy
60 123提示
本题有个小小的陷阱哦。如果答案错的话,认真检查一下代码吧。
#include<stdio.h>
int main()
{
int n,a,b,c;
double d,e;
scanf("%d",&n);
while(n--)
{ scanf("%d%d%d",&a,&b,&c);
d=(a+b)*1.0/3;
e=(a-d)/d*c;
printf("%.0f\n",e);
}
return 0;
}
E:汽水瓶
题目描述
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
样例输入 Copy
3 10 81 0样例输出 Copy
1 5 40
#include <bits/stdc++.h>
#define ll long long
#define MM 0x3f3f3f3f
#define pii pair<int, int>
#define pll pair<long long, long long>
using namespace std;
const int N = 1e6 + 5;
const int P = 131;
int dx[] = {0, 0, -1, 1}; //-1, -1, 1, 1};
int dy[] = {1, -1, 0, 0}; // 1, -1, 1, -1};
void solve(){
int n;
while(cin>>n&&n){
cout<<n/2<<"\n";
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
while (t--){
solve();
}
return 0;
}
F:数字整除
题目描述
定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。
例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。
输入
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=10100),表示待判断的正整数。n=0表示输入结束,你的程序不应当处理这一行。
输出
对于每组测试数据,输出一行,表示相应的n是否是17的倍数。1表示是,0表示否。
样例输入 Copy
34 201 2098765413 1717171717171717171717171717171717171717171717171718 0样例输出 Copy
1 0 1 0
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 +5;
const int M = 1e9 +7;
const int inf = 0x3fffffff;
void solve(){
string s;
while (cin >> s && s[0] != '0')
{
int sum = 0;
for (int i = 0; i < s.size(); i++)
{
sum = sum * 10 + s[i] - '0';
sum %= 17;
}
if (sum == 0)
cout << 1 << "\n";
else
cout << 0 << "\n";
}
}
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
solve();
return 0;
}
G:超大型 LED 显示屏
你是学生会体育部长,负责组织一年一度的校篮球比赛。马上就要决赛了,你希望吸引更多的 人来看比赛,因此打算更新一下设备,用一个超大的 LED屏幕来显示比分。当然,电也不是 不要钱的,所以你决定先分析一下往年的比赛,估计一下大概要耗多少电。
如上图,每个数字由 7条线段组成,每条亮着的线段每秒钟耗电量为 1个单位。线段不亮的时 候不耗电。为了省电,比分不显示前导 0(不过 0分的时候要显示数字 0)。
你的 LED显示屏共包含 6个数字,即双方的比分各有 3 位数。输入
输入包含不超过 100组数据。每组数据第一行为"START hh:mm:ss",表示比赛开始时刻为 hh:mm:ss。最后一行为"END hh:mm:ss",即比赛结束时刻。二者之间至少会有一个 SCORE信 息,格式为"SCORE hh:mm:ss team score",其中 team要么是"home"(主场)要么是"guest"(客 场), score表示得分,为 1,2或者 3。这些信息保证按照时间从早到晚的顺序排列,且任意两 条 SCORE信息的时刻均不相同。比赛开始时间不会早于 9:00,结束时间不会晚于同一天的 21:00。注意,如果比赛开始时间为 09:00:00,结束时间为 09:00:01,比赛长度为 1秒钟,而不 是 2秒钟。
输出
对于每组数据,输出测试点编号和总耗电量。
样例输入 Copy
START 09:00:00 SCORE 09:01:05 home 2 SCORE 09:10:07 guest 3 END 09:15:00 START 09:00:00 SCORE 10:00:00 home 1 SCORE 11:00:00 home 1 SCORE 12:00:00 home 1 SCORE 13:00:00 home 1 SCORE 14:00:00 home 1 SCORE 15:00:00 home 1 SCORE 16:00:00 home 1 SCORE 17:00:00 home 1 SCORE 18:00:00 home 1 SCORE 19:00:00 home 1 SCORE 20:00:00 home 1 END 21:00:00样例输出 Copy
Case 1: 9672 Case 2: 478800
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 +5;
const int M = 1e9 +7;
const int inf = 0x3fffffff;
int aa[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int fun(int n)
{
int sum = 0;
if (n == 0)
return 6;
while (n)
{
sum += aa[n % 10];
n /= 10;
}
return sum;
}
void solve()
{
string a, b, c;
int h, m, s;
char cc, ccc, cccc, ccccc;
int num = 1;
while (cin >> a >> h >> cc >> m >> ccc >> s)
{
int hh, mm, ss,sum=0;
int ans1 = 0, ans2 = 0, ans;
while (1)
{
cin >> b >> hh >> cccc >> mm >> ccccc >> ss;
sum += (fun(ans1) + fun(ans2)) * ((hh - h) * 3600 + (mm - m) * 60 + (ss - s));
if (b[0] == 'E')
break;
cin >> c >> ans;
if (c[0] == 'h')
ans1 += ans;
else
ans2 += ans;
h = hh;
m = mm;
s = ss;
}
cout << "Case " << num++ << ": " << sum << "\n";
}
}
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
solve();
return 0;
}
H:聊天止于呵呵
题目描述
(现代版)俗话说:流言止于智者,聊天止于呵呵。输入一段聊天记录,你的任务是数一数有 多少段对话“止于呵呵”,即对话的最后一句话包含单词 hehe或者它的变形。
具体来说,我们首先提取出对话的最后一句话,把所有非字母的字符替换成空格,把所有字符 替换成小写,然后导出一个单词列表(由空格隔开),只要列表中的任何一个单词是 hehe,这 段对话就算作“止于呵呵”。比如,"Hi! Are you OK?" 会变成四个单词:hi, are, you, ok。注 意,单词列表可以是空的(比如,这句话是:"?!?!!")
有些人喜欢使用 hehe的变形,这些变形也应被视为“呵呵”。为了简单起见,本题只考虑由 n(n>1)个 he连接而成的单词,比如 hehehe或者 hehehehe。注意,以 hehe为连续子串的其他单 词不应视为“呵呵”,比如 hehee,或者 ehehe。
每两个不同人之间的所有对话算作“一段对话”。输入
输入仅包含一组数据,每行是一句对话,格式为:
人名 1->人名 2: 一句话.
每行最多包含 1000个字符,最多 100行。
输出
输出“止于呵呵”的对话段落所占的百分比,四舍五入到最近的整数。输入数据保证答案不会 同时和两个整数最近。
样例输入 Copy
A->B: Hello! A->C: Hi! B->A: Hehe B->D: Hei! D->B: How are you? A->C: Hi??? A->C: Are you there? B->D: Hehehei! D->B: What does hehehei mean? F->E: I want to hehehehehe yah.样例输出 Copy
50%提示
样例解释
A 和 B 之间的最后一句话是"Hehe".
A 和 C 之间的最后一句话是"Are you there?".
B 和 D 之间的最后一句话是"What does hehehei mean?".
E 和 F 之间的最后一句话是"I want to hehehehehe yah". 最后第一段和最后一段话是“止于呵呵”的(注意最后一段对话是以呵呵的变种结束),因此 比例是 50%。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 +5;
const int M = 1e9 +7;
const int inf = 0x3fffffff;
bool fun(string s){
if(s.size()&1){
return false;
}
for(int i=0;i<s.size();i++){
if(i&1){
if(s[i]!='e'){
return false;
}
}
else{
if(s[i]!='h'){
return false;
}
}
}
return true;
}
void solve(){
string s1,s2;
map<pair<string,string>,string> mp;
while(cin>>s1){
int i=s1.find("->");
int j=s1.find(":");
string a=s1.substr(0,i);
string b=s1.substr(i+2,j-i-2);
getline(cin,s2);
if(a>b){
swap(a,b);
}
mp[{a,b}]=s2;
}
double s=0;
for(auto it:mp){
string s3="";
for(auto c:it.second){
if(isalpha(c)){
s3+=tolower(c);
}
else{
if(s3!=""&&fun(s3)){
s++;
s3="";
break;
}
s3="";
}
}
if(s3!=""&&fun(s3)){
s++;
}
}
cout<<fixed<<setprecision(0)<<(s/mp.size()*100)<<"%\n";
}
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
solve();
return 0;
}