【c语言】日常刷题☞有趣的题目分享❀❀

︿( ̄︶ ̄)︿hi~~

ヽ( ̄ω ̄( ̄ω ̄〃)ゝ本次刷题发现3个比较有趣的题目,分享给您,希望对您有所帮助,谢谢❀❀~

目录

1.单词覆盖还原(单词的连续性)

2.输出数字三角形(循环的灵活运用)

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. 



本次的分享就到这里了,希望对您有所帮助,我们下期见了~~

白白~○( ^皿^)っ

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值