目录
7-2 取石子(二) (10 分)
Tom 和 Mary 玩取石子的游戏:n 颗石子码成一堆,从 Tom 开始,两人轮流取石子,最少取 1 颗、最多取 2 颗,谁取到最后一颗石子,谁就失败。两个人都极聪明,不会放过任何取胜的机会。请同样聪明的你编写程序,输入石子的数量,输出胜者的名字。
输入格式
石子的数量
输出格式
胜者的名字
输入样例1
1
输出样例1
Mary
输入样例2
2
输出样例2
Tom
经典巴什博弈 给对面留下(2+1)的倍数就能赢
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%3==1)
{
printf("Mary");
}
else if (n%3==2)
{
printf("Tom");
}
else
{
printf("Tom");
}
}
7-3 大小写字符转换 (6 分)
输入一个字符,如果是大写字母,将它转换成小写字母并输出;如果是小写字母,将它转换成大写字母并输出;如果都不是,则输出:error
输入样例:
a
输出样例:
A
输入样例:
B
输出样例:
b
输入样例:
1
输出样例:
error
输出字符数字实质上是输出ASCII码对应值
而大小写ASCII码值相差32
#include <stdio.h>
#include <math.h>
#include<stdbool.h>
int main()
{
char c;
scanf("%c",&c);
if(c>=97&&c<=122)
{
c=c-32;
printf("%c",c);
}
else if(c>=65&&c<=90)
{
c=c+32;
printf("%c",c);
}
else
{
printf("error");
}
return 0;
}
下面是一道一样的题目
分支结构——大小写字母判断 (5 分)
键盘输入一个英文字母,如果是大写字母,输出ASCII码,如果是小写字母输出对应的大写字母。(其它情况没有输出)
输入格式:
输入一个英文字母。
输出格式:
根据输入的字母,输出ASCII码或者大写字母
输入样例1:
A
输出样例1:
65
输入样例2:
a
输出样例2:
A
#include<stdio.h>
int main()
{
int year;
char a,b,c;
int t,s;
scanf("%c",&a);
if(a>=97&&a<=122)
{
printf("%c",a-32);
}
if(a>=65&&a<=90)
{
printf("%d",a);
}
return 0;
}
7-4 冠军魔术 (10 分)
2018年FISM(世界魔术大会)近景总冠军简纶廷的表演中有一个情节:以桌面上一根带子为界,当他将纸牌从带子的一边推到另一边时,纸牌会变成硬币;把硬币推回另一边会变成纸牌。
这里我们假设纸牌会变成等量的硬币,而硬币变成纸牌时,纸牌的数量会加倍。那么给定纸牌的初始数量,当他来回推了 N 次(来/回各算一次)后,手里拿的是纸牌还是硬币?数量是多少?
输入格式:
输入在一行里给出两个正整数,分别是纸牌的初始数量和魔术师推送的次数。这里假设初始状态下魔术师手里全是纸牌。
输出格式:
如果最后魔术师手里是纸牌,输出 0 和纸牌数量;如果是硬币,则输出 1 和硬币数量。数字间须有 1 个空格。题目保证结果数值不超出整型范围(即 231−1)。
输入样例 1:
3 7
输出样例 1:
1 24
输入样例 2:
8 4
输出样例 2:
0 32
找规律总结数学公式 或者将每一次情况模拟出来
#include<stdio.h>
#include<math.h>
int main()
{
int num,lun;//数量与次数
int type,nums;
scanf("%d %d",&num,&lun);
if(lun%2==0)
{
type=0;
}
else
{
type=1;
}
nums=num*pow(2,lun/2);
printf("%d %d",type,nums);
}
4-2判断闰年 (5 分)
条件 :被4整除但不能被100正除 或能被400整除
#include<stdio.h>
int main()
{int year;
scanf("%d",&year);
if((year%4==0&&year%100!=0 )|| year%400==0)
{
printf("%d is leap year.",year);
}
else
{
printf("%d is not leap year.",year);
}
return 0;
}
7-6 判断一个三位数是否为水仙花数 (10 分)
本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
输入格式:
输入在一行中给出一个需要判断的整数 N(100≤N≤999)。
输出格式:
如果N是水仙花数,则在一行中输出Yes,否则输出No。如果N不是三位数,则输出Invalid Value.。
输入样例1:
153
输出样例1:
Yes
输入样例2:
500
输出样例2:
No
输入样例3:
-2
输出样例3:
Invalid Value.
先将输入数据筛选 不符合三位数输出无效 符合取出三位数进行判断
#include<stdio.h>
int main()
{
int year;
int a,b,c;
scanf("%d",&year);
if(year<100||year>999)
{
printf("Invalid Value.");
}
else{
a=year%10;
b=year/10%10;
c=year/100;
if(a*a*a+b*b*b+c*c*c==year)
{
printf("Yes");
}
else{
printf("No");
}
}
return 0;
}
7-7 求中间数 (8 分)
这里我是建议用冒泡和快速排序 ,用if判断只要看懂就行了
if版
#include<stdio.h>
int main()
{
int year;
int a,b,c;
int t,s;
scanf("%d %d %d",&a,&b,&c);
/*
if(a>b&&b>c||c>b&&b>a)
{
printf("%d",b);
}
if(b>a&&a>c||c>a&&a>b)
{
printf("%d",a);
}
if(b>c&&c>a||a>c&&c>b)
{
printf("%d",c);
}
*/
if(a<b)
{
t=a;
a=b;
b=t;
}
if(a<c)
{
t=a;
a=c;
c=t;
}
if(b<c)
{
t=b;
b=c;
c=t;
}
printf("%d",b);
return 0;
}
c++版
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
int a[5];
int main()
{
int i,j,k;
for(i=0;i<3;i++)
{
cin>>a[i];
}
sort(a,a+3);//左闭右开 对a[0]和a[2]进行排序
cout<<a[1];
return 0;
}
7-9 有多少位是7? (8 分)
描述
从键盘读入一个4位数的整数,求该数中有多少位是7
输入格式:
一个4位数的整数
输出格式:
该整数中7的个数
输入样例:
在这里给出一组输入。例如:
4757
输出样例:
在这里给出相应的输出。例如:
2
两种思路:
1.将四位数取出来依次判断是否为数字7
2.用一个变量录入字符 一个一个地判断输入的字符是否为字符7
这里用的是方案2
c++
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
char temp;
int main()
{
int i,j,k;
int sum=0;
for(i=0;i<4;i++)
{
cin>>temp;
if(temp=='7')
sum++;
}
cout<<sum;
}
7-10 多分支表达-数据奇偶判断 (8 分)
键盘输入两个非零整数A和B,如果A和B都是偶数则输出两个数的和,如果A和B都是奇数则输出两个数的差,如果A是奇数B是偶数则输出两数积,如果A是偶数B是奇数输出A/B结果
输入格式:
输入两个非零整数,逗号分隔
输出格式:
如果A和B都是偶数则输出:A+B=两个数的和; 如果A和B都是奇数则输出:A-B=两个数的差; 如果A是奇数B是偶数则输出:A*B=两数积; 如果A是偶数B是奇数输出:A/B=两个数的商。 如果输入数据A为0或B为0,没有任何输出。
输入样例:
在这里给出一组输入。例如:
18,20
输出样例:
在这里给出相应的输出。例如:
18+20=38
放源代码了
#include<stdio.h>
#include<math.h>
int main()
{
int year;
int a,b,c,d;
int i=0;
int A,B;
char s;
scanf("%d%c%d",&a,&s,&b);
if(a!=0&&b!=0)
{
if(a%2==0&&b%2==0)
{
printf("%d+%d=%d",a,b,a+b);
}
if(a%2!=0&&b%2!=0)
{
printf("%d-%d=%d",a,b,abs(a-b));
}
if(a%2!=0&&b%2==0)
{
printf("%d*%d=%d",a,b,a*b);
}
if(a%2==0&&b%2!=0)
{
printf("%d/%d=%d",a,b,a/b);
}
}
return 0;
}
这里再提供一种高效的判断奇偶的方法----->使用位运算符,感兴趣的同学可以去查查
注意不要漏掉括号了哦,& 优先级低于 ==
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
char temp;
int main()
{
int n;
cin>>n;
if((n&1)==0)
printf("n为偶数\n");
else
printf("n为奇数\n");
}
7-12 强迫症 (10 分)
小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的出生年月都整理成 年年年年-月月 格式。对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。
输入格式:
输入在一行中给出一个出生年月,为一个 6 位或者 4 位数,题目保证是 1000 年 1 月到 2021 年 12 月之间的合法年月。
输出格式:
在一行中按标准格式 年年年年-月月 将输入的信息整理输出。
输入样例 1:
9808
输出样例 1:
1998-08
输入样例 2:
0510
输出样例 2:
2005-10
输入样例 3:
196711
输出样例 3:
1967-11
分类讨论,不重不漏
%02d的意思为 该整型数据占2格右对齐 左边不能占满用字符0代替
#include<stdio.h>
int main()
{
int year;
int a,b,c,d;
double t,s,x;
scanf("%d",&year);
if(year<10000)
{
a=year/100;//未前缀年
b=year%100;//月份
if(a<22)
{
printf("20%02d-%02d",a,b);
}
else{
printf("19%02d-%02d",a,b);
}
}
else
{
b=year/100;//前缀年
d=year%100;//月份
printf("%d-%02d",b,d);
}
return 0;
}
7-13 分段函数求值 (5 分)
根据如下分段函数定义求y的值。
y=⎩⎨⎧x22x−13x−11x<00≤x<10x≥10
输入格式:
在一行中输入浮点数x。
输出格式:
输出y的值,保留两位小数。
输入样例:
-5
输出样例:
在这里给出相应的输出。例如:
25.00
……
#include<stdio.h>
int main()
{
int year;
char a,b,c;
double t,s,x,y;
scanf("%lf",&x);
if(x<0)
{
y=x*x;
printf("%.2lf",y);
}
else if(x>=0&&x<10)
{
printf("%.2lf",2*x-1);
}
else{
printf("%.2lf",3*x-11);
}
return 0;
}
7-14 判断10的倍数 (5 分)
输入一个整数a,如果a为10的倍数,则输出a;如果a不是10的倍数,什么也不输出。
输入格式:
直接输入1个整数,没有其他任何附加字符。
输出格式:
直接输出结果,没有其他任何附加字符。
输入样例:
在这里给出一组输入。例如:
20
输出样例:
在这里给出相应的输出。例如:
20
简单if 应用
#include<stdio.h>
int main()
{
int year;
int a,b,c;
int t,s;
scanf("%d",&a);
if(a%10==0)
{
printf("%d",a);
}
return 0;
}
本文详细介绍了多个C++编程练习题,包括取石子游戏的胜负判断、字符大小写转换、分段函数求值等。通过实例解析输入输出格式,涉及递归、位运算符和条件判断等编程技巧。
798

被折叠的 条评论
为什么被折叠?



