7-1 整数格式
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
给定一个字符串,请分析该字符串格式,检查它是否符合10进制整数的表示格式。
特别提醒:
1、字符串如果有前导0,如0123,则该字符串不符合整数格式;
2、+0,-0是不符合整数格式的,但+1和-1都是符合的;
3、科学记数法是不符合的。
输入格式:
第一行为一个整数t(0<t<=10),代表测试用例组数。后边t行字符串(每个字符串长度都不超过30,且不包含空格和制表符tab),每行代表一个待检测字符串。
输出格式:
共t行,依次对应输入的测试用例,如果符合则输出yes,否则输出no。
输入样例:
8
1
-1
200
999
-999
0123
+0
-0
输出样例:
yes
yes
yes
yes
yes
no
no
no
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include<stdio.h>
#include<string.h>
int check(char*s){
if(s[0]=='+'&&s[1]=='0'){
return 0;
}
if(s[0]=='-'&&s[1]=='0'){
return 0;
}
if(s[0]=='0'&&s[1]!='\0'){
return 0;
}
if(s[0]=='+'&&s[1]=='\0'){
return 0;
}
if(s[0]=='-'&&s[1]=='\0'){
return 0;
}
int len = strlen(s);
int i=0;
if(s[0]=='+'||s[0]=='-'){
i++;
}
for(;i<len;i++){
if(s[i]<'0'||s[i]>'9'){
return 0;
}
}
return 1;
}
int main(){
int t=0;
scanf("%d",&t);
char s[31];
for(int i=0;i<t;i++){
scanf("%s",s);
if(check(s)){
printf("yes\n");
}else{
printf("no\n");
}
}
return 0;
}
7-2 过滤注释
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
C语言的注释分为两种,第一种:在一行源代码中“//”后的内容为注释内容。第二种:“/*”与“*/”之间的内容为注释内容。第三种(其实是第二种的特例):程序中只出现了“/*”,没有“*/”与之对应,那么将“/*”后的全部内容都要过滤掉。注意,只要是注释内容,那么注释内容中的字符应该全部忽略,即不起任何的作用。例如“/*”与“*/”之间如果再有“//”,那么“//”不应起作用;如果“//”后同行内再有“/*”,那么“/*”也不应起作用。你的任务是将一段源代码中所有注释过滤掉。在本过滤注释系统中,你可以忽略源文件中双引号导致“//”、“/*”、“*/”失去作用的情况,即只要“//”、“/*”、“*/”不是注释内容,在任何情况下都起作用。
输入格式:
若干行,为一段待处理的C语言源代码。测试用例保证该段代码的最后一个字符为‘$’,且输入中只包含这一个‘$’。该字符为输入结束标志,不是源代码中的内容。
输出格式:
若干行,为去除注释的C代码。
输入样例:
/*
@Author: BUPT
@Date: 2010 8 26
*/
#include<stdio.h>
int main()
{
int a = 10 , b = 2 , c ;
c = a / b ; //I just want to test '/'
printf("I love programming C.\n") ; //"printf" is a useful function /*
printf("I hope you love it too!\n") ;
/*
//C is not always hard , if you love it , it will not treat you rough.
*/
return 0 ;
}
$
输出样例:
#include<stdio.h>
int main()
{
int a = 10 , b = 2 , c ;
c = a / b ;
printf("I love programming C.\n") ;
printf("I hope you love it too!\n") ;
return 0 ;
}
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main(){
char c;
int state;
while((c = getchar())!='$')
{
switch (state)
{
case 0:
if(c=='/')
{
state = 1;
}
else
{
putchar(c);
}
break;
case 1:
if(c=='/')
{
state = 2;
}
else if(c=='*')
{
state = 3;
}
else
{
putchar('/'); putchar(c);
state = 0;
}
break;
case 2:
if(c=='\n')
{
state = 0;
putchar('\n');
}
break;
case 3:
if(c=='*')
{
state = 4;
}
break;
case 4:
if(c=='/')
{
state = 0;
}
else if(c=='*')
{
state = 4;
}
else
{
state = 3;
}
break;
}
}
}
7-3 抓老鼠啊~亏了还是赚了?
分数 20
全屏浏览
切换布局
作者 周强
单位 青岛大学
某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T
),或者放置一块奶酪(C
),或者什么也不放(X
)。捕鼠夹可重复利用,不计成本,奶酪每块3元。
聪明的老鼠呢?它们每天可能会派出一只老鼠到墙角,看看墙角有啥:
- 若什么也没有(
X
),老鼠们就不高兴了(Unhappy),会有长达一天(也就是第二天)的不高兴期。在不高兴期间,不派出老鼠。不高兴期结束之后,派出老鼠。 - 若有捕鼠夹(
T
),这只老鼠被引诱吃掉奶酪并被打死(Dead),老鼠们会有长达两天(也就是第二和第三天)的伤心期。在伤心期间,不派出老鼠。伤心期结束之后,派出老鼠。在这种情况下,抓到1只老鼠可获得奖励10元,但同时也耗费了一块奶酪。注意,如果某一天放置了捕鼠夹但老鼠没有出现,则没有耗费奶酪。 - 若有奶酪(
C
),老鼠吃了奶酪会很开心(Happy!),会有长达两天(第二和第三天)的兴奋期。在兴奋期间,即使叠加了不高兴或者伤心,也必定派出老鼠。在这种情况下,没抓到老鼠,而且耗费了一块奶酪。注意,如果某一天放置了奶酪但老鼠没有出现,则奶酪可以下次再用,没有耗费。
现在给你连续几天的操作序列,且已知第一天肯定会派出老鼠,请判断老鼠每天的状态,并计算盈利。
输入格式:
输入在一行中给出连续的由C
或T
或X
组成的不超过70个字符的字符串,以$
结束。字符串中每个字符表示这一天的操作( 即X
:什么都不放;T
:放捕鼠夹;C
:放奶酪)。题目保证至少有一天的操作输入。
输出格式:
要求在第一行输出连续的字符串,与输入相对应,给出老鼠的状态:
!
表示派出老鼠吃到奶酪D
表示派出老鼠被打死U
表示派出老鼠无所获-
表示没有派出老鼠
第二行则应输出一个整数表示盈利。(如果有亏损,则是负数)
输入样例1:
TXXXXC$
输出样例1:
D--U-!
4
输入样例2:
CTTCCX$
输出样例2:
!DD--U
11
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
# include <stdio.h>
int main(){
char ch;
int unhappy, sad, happy;
unhappy = 0;
sad = 0;
happy = 0;
int res = 0;
while((ch = getchar()) != '$'){
if(happy >0){
happy--;
if(sad > 0){
sad--;
}
if(unhappy > 0){
unhappy--;
}
}else if(sad > 0){
sad--;
putchar('-');
continue;
}else if(unhappy > 0){
unhappy--;
putchar('-');
continue;
}
if(ch=='X'){
putchar('U');
unhappy = 1;
}
else if(ch == 'T'){
putchar('D');
sad =2;
res += 7;
}
else if(ch == 'C'){
putchar('!');
happy = 2;
res -=3;
}
}
printf("\n%d\n",res);
return 0;
}
7-4 龟兔赛跑
分数 20
全屏浏览
切换布局
作者 陈建海
单位 浙江大学
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
输入格式:
输入在一行中给出比赛时间T(分钟)。
输出格式:
在一行中输出比赛的结果:乌龟赢输出@_@
,兔子赢输出^_^
,平局则输出-_-
;后跟1空格,再输出胜利者跑完的距离(平局输出乌龟或兔子跑完的距离均可)。
输入样例:
242
输出样例:
@_@ 726
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main()
{
int t;
scanf("%d", &t);
int ra = 0, tu = 0;
int rest = 0;
long long int s = 0;
int i =1;
for(;i<=t;i++){
tu +=3;
if(rest==0){
ra+=9;
}else if(rest!=0){
rest--;
}
if(i%10==0&&rest==0){
if(ra>tu){
rest+=30;
}
}
}
if(ra>=tu){
s = ra;
if(ra>tu){
printf("^_^ ");
}else{
printf("-_- ");
}
}else{
s = tu;
printf("@_@ ");
}
printf("%lld\n", s);
return 0;
}
7-5 刷题与Z老师的头发
分数 10
全屏浏览
切换布局
作者 周强
单位 青岛大学
在Pintia上,每天Z老师出题、小盆友们刷题。Z老师的头发遵从以下规律:
1、每天生长出60根头发;
2、每出一道题,减少20根头发;
3、每天结束时统计累积做题情况:
(1)若出的题全部被做出来,则Z老师产生“没题焦虑”,减少30根头发;
(2)若小盆友做出来的题少于50%,则Z老师产生“学生不用功焦虑”,减少70根头发。
现给定连续N天的出题、刷题情况,请计算Z老师头发的变化情况。
输入格式:
第一行输入一个正整数N
(N<20
);
接下来N
行,每行输入两个非负整数,分别是一天的出题数量q
和刷题(做出来)数量s
,以空格间隔。
题目输入保证出题总数量不超过N*10
,并且每天的刷题量不会使累积刷题数量超过累积出题数量。
输出格式:
若Z老师头发增加K
根,则输出+K
;若Z老师头发减少K
根,则输出-K
;若没有变化,则输出--
输入样例1:
3
5 3
5 1
5 11
输出样例1:
-220
输入样例2:
3
3 2
3 2
3 2
输出样例2:
--
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int hair = 0;
int q, s;
int Q=0, S=0;
for(int i = 0; i<n; i++){
scanf("%d %d", &q, &s);
hair+=60;
hair -= q*20;
Q += q;
S += s;
if(2*S<Q){
hair -=70;
}else if(S == Q){
hair -= 30;
}
}
if(hair>0){
printf("+%d", hair);
}
else if(hair<0){
printf("%d", hair);
}else{
printf("--");
}
return 0;
}
7-6 英语老师小助手
分数 20
全屏浏览
切换布局
作者 陈越原创 季江民修改
单位 浙江大学
英语老师要求学生按照如下规则写一串字母:
规则1、如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中前一个字母的大写;
规则2、如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中下一个字母的小写。
例如 zZzZYXWwxyYX 就是一个合法的字母串;而 wVUuvUTsR 就是非法的。
现在面对全班学生交上来的作业,老师请你写个程序自动批改。
输入格式:
每行给出一位学生的作业,即仅由英文字母组成的非空字母串,长度大于2。
输出格式:
对每位学生的作业,如果正确就在一行中输出 Y,否则输出 N。
输入样例1:
zZzZYXWwxyYX
输出样例1:
Y
输入样例2:
wVUuvUTsR
输出样例2:
N
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
#include <ctype.h>
int main()
{
char ch[10000];
scanf("%s", &ch);
int i = 0, j = 1;
int state ;
while (ch[j] != '\0')
{
if(ch[i]>64 && ch[i]<91){
if(ch[j]==tolower(ch[i])){
state = 1;
}else if(ch[j]==(ch[i]-1)){
state = 1;
}else{
state = 0;
}
}else if(ch[i]>96 && ch[i]<123){
if(ch[j]==toupper(ch[i])){
state = 1;
}else if(ch[j]==(ch[i]+1)){
state = 1;
}else{
state = 0;
}
}
i++;
j++;
}
if(state == 1){
printf("Y");
}else{
printf("N");
}
return 0;
}