【c语言】日常刷题?有趣的题目分享??
︿( ̄︶ ̄)︿hi~~
ヽ( ̄ω ̄( ̄ω ̄〃)ゝ本次刷题发现3个比较有趣的题目,分享给您,希望对您有所帮助,谢谢??~
目录
1.单词覆盖还原(单词的连续性)
题目描述
一个长度为l的字符串中被反复贴有 `boy` 和 `girl` 两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 `boy` 几个 `girl`?
输入格式
一行被反复贴有 `boy` 和 `girl` 两单词的字符串。
?输出格式
两行,两个整数。第一行为 `boy` 的个数,第二行为 `girl` 的个数。
样例输入:?
......boyogirlyy......girl.......
样例输出 :
4
2
代码如下:
#include <stdio.h>
int main()
{
char a[300];int boy=0,girl=0;
gets(a);
for(int i=0;a[i]!='\0';i++)
{
if(a[i]=='b'||a[i+1]=='o'||a[i+2]=='y')
{
boy++;
}
if(a[i]=='g'||a[i+1]=='i'||a[i+2]=='r'||a[i+3]=='l')
{
girl++;
}
}
printf("%d\n",boy);
printf("%d",girl);
return 0;
}
参考题解:
这里利用了计算机重复计算的功能,且有每个单词都是连续的,这样就可以通过if(a[i]=='b'||a[i+1]=='o'||a[i+2]=='y')这种类似的判断进行计数了~︿( ̄︶ ̄)︿
2.输出数字三角形(循环的灵活运用)
?题目描述
给出?n,请输出一个直角边长度是?n?的数字直角三角形。所有数字都是?2?位组成的,如果没有?2?位则加上前导?0。
?输入格式
输入一个正整数?n。
?输出格式
输出如题目要求的数字直角三角形。
样例输入:?
5
样例输出:?
0102030405
06070809
101112
1314
15
代码如下:
void f(int k)
{
if(k<10)
printf("0%d",k);
else
printf("%d",k);
}
int main()
{
int n;
scanf("%d",&n);
int m=1;int count=n;int k=1;
for(int i=1;m!=n+1;i++)
{
for(int j=0;j<count;j++)
{
f(k++);
}
printf("\n");
count--;
m++;
}
return 0;
}
参考题解:
两个for循环的分工明确:
以i为变量的for循环作为数字三角的竖排,每一层都会多一,所以m++;以j为变量的for循环作为数字三角的横排,每一层都会少一,所以count--;
3.收金币(奇妙的思考)
题目描述
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续?n?天每天收到?n?枚金币后,骑士会在之后的连续?n+1?天里,每天收到?n+1?枚金币。
请计算在前?k?天里,骑士一共获得了多少金币。
?输入格式
一个正整数?k,表示发放金币的天数。
?输出格式
一个正整数,即骑士收到的金币数。
样例输入:?
6
样例输出:?
14
代码如下:?
#include <stdio.h>
int main()
{
long sum=0;
int a,count=1;
scanf("%d",&a);
for(int i=1;i<=a;i++)
{
a-=i;sum+=count*count;count++;
}
printf("%ld",sum+a*count);
return 0;
}
参考题解:
本题代码很少,但做法十分有趣,其中i<=a;i++;a-=i这三句表达式很好解决了每隔n天发n枚金币的情况,count++解决的是每次发金币的数量会+1.?
本次的分享就到这里了,希望对您有所帮助,我们下期见了~~
白白~○( ^皿^)っ
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!