REVISE DAY 1 C Circulate(算法竞赛入门经典 循环)

今天有个大佬对我说,像我这样没有扎实的算法知识基础,甚至c语言连略知一二的程度都到不了,学得快,忘得更快,不能只为了竞赛去学习。所以我决定从新复习一下c语言基础,和算法与数据结构的基础知识,不光是为了准备比赛,更是为了以后的学习

Circulate(while,do while,for)


.1 daffodil 水仙花数

输出100~999中的所有水仙花数。若3位数ABC满足ABC=A3+B3+C3,则称其为水仙花 数。例如153=13+53+33,所以153是水仙花数。

code:

#include<stdio.h>
int main()
{
	int i;
	int a,b,c;
	for(i=100;i<1000;i++)
	{
		a=i/100;
		b=i%100/10;
		c=i%100%10;
		if(a*a*a+b*b*b+c*c*c==i)
			printf("%d ",i);
	}
	return 0;
}

.2 hanxin 韩信点兵

相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人 一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组 数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c< 7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。输入到文件 结束为止。
样例输入:
2 1 6
2 1 3
样例输出:
Case 1: 41
Case 2: No answer

code:

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d", &a, &b, &c)
		for (int i = 10; i < 100; i++)
		{
			if (i % 3 == a && i % 5 == b && i % 7 == c)
			{
				printf("%d", i);
				return 0;
			}
		}
		if(i==101)
		printf("No answer");
	return 0;
}

.3 triangle 倒三角

输入正整数n≤20,输出一个n层的倒三角形。例如,n=5时输出如下:
在这里插入图片描述

code:

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int i, j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < i; j++)
			printf(" ");
		for (j = 0; j < 2 * (n - i) - 1; j++)
			printf("#");
		printf("\n");
	}
	return 0;
}

.4 subsequence 子序列的和

输入两个正整数n<m<106,输出在这里插入图片描述 ,保留5位小数。输入包含多组数据, 结束标记为n=m=0。提示:本题有陷阱。
样例输入:
2 4
65536 655360
0 0
样例输出:
Case 1: 0.42361
Case 2: 0.00001

code:

#include<stdio.h>
int main()
{
	int n, m,cnt=0;
	while (scanf("%d%d", &n, &m))
	{
		if (n == 0 && m == 0)
			break;
		else
		{
			cnt++;
			double i;
			double sum = 0;
			for (i = n; i <= m; i++)
				sum += 1 / i / i;//注意,n过大的话相乘会溢出
			printf("case%d:%.5f", cnt,sum);
		}
	}
	return 0;
}

.5 decimal 分数化小数

输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤106,c≤100。输 入包含多组数据,结束标记为a=b=c=0。
样例输入:
1 6 4
0 0 0
样例输出:
Case 1: 0.1667

这题就比较有意思了,本来抱着复习c基础的心态来做练习,结果发现了一道模拟题。注意此题的c范围是小于等于一百,double的最大范围才是16位,所以我们要拿出小学做除法时的方法,乘10错位再取余。(记得要多算一位,用来四舍五入)

code:

#include<stdio.h>
int main()
{
	int a, b, c,cnt=0,sd[1000],d,h;
	while (scanf("%d%d%d", &a, &b, &c))
	{
		if (a == 0 && b == 0 && c == 0)
			break;
		else
		{
			cnt++;
			int n = a / b;
			printf("case %d:%d.",cnt,n);
			for (int i = 0; i <= c; i++)//多算一位
			{
				a *= 10;
				sd[i] = a / b;
				a %= b;
			}
			if (sd[c] >= 5)
				sd[c - 1] += 1;
			for (int i = 0; i < c; i++)
				printf("%d",sd[i]);
		}
	}
	return 0;
}

.6 permutation(排列)

用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要 求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必 太动脑筋。

既然题目既没规定时空复杂度,又让咱不动脑子,那么我只好恭敬不如从命,用九层大循环+判断N连 来搞定它了!!!

死亡代码:

#include <stdio.h>
int main()
{
	int a, b, c, d, e, f, g, h, i;
	for (a = 1; a <= 9; a++)
	{
		for (b = 1; b <= 9; b++)
		{
			for (c = 1; c <= 9; c++)
			{
				for (d = 1; d <= 9; d++)
				{
					for (e = 1; e <= 9; e++)
					{
						for (f = 1; f <= 9; f++)
						{
							for (g = 1; g <= 9; g++)
							{
								for (h = 1; h <= 9; h++)
								{
									for (i = 1; i <= 9; i++)
									{
										if ((2 * (a * 100 + b * 10 + c) == 1 * (d * 100 + e * 10 + f)) && (3 * (a * 100 + b * 10 + c) == 1 * (g * 100 + h * 10 + i)) && (a != b) && (a != c) && (a != d) && (a != e) && (a != f) && (a != g) && (a != h) && (a != i) && (b != c) && (b != d) && (b != e) && (b != f) && (b != g) && (b != h) && (b != i) && (c != d) && (c != e) && (c != f) && (c != g) && (c != h) && (c != i) && (d != e) && (d != f) && (d != g) && (d != h) && (d != i) && (e != f) && (e != g) && (e != h) && (e != i) && (f != g) && (f != h) && (f != i) && (g != h) && (g != i) && (h != i))
										{
											printf("%d %d %d\n", a * 100 + b * 10 + c, d * 100 + e * 10 + f, g * 100 + h * 10 + i);
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	return 0;
}

一天一节,循序渐进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值