第四、五章循环语句查缺补漏

while先判断后执行,其中的语句可能一次也不执行

do-while先执行后判断,其中的语句至少执行一次

实例:猜数字小游戏

#include<stdio.h>
#include<stdlib.h>
#include<time.h> 
int main(void)
{
	srand(time(0));//每次运行给出的数不同 
	int number = rand()%100+1;//每次召唤rand()就得到一个随机整数 
	int count = 0;
	int a = 0;
	printf("我想好了一个1-100之间的数\n");
	do{
		printf("猜猜这个1-100之间的数\n");
		scanf("%d",&a);
		count++;
		if(a > number){
			printf("猜大了");
		} 
		else if(a < number){
			printf("猜小了");
		}
	}while(a!=number);
	printf("你用了%d次猜到了答案为%d",count,number);
	return 0;
 } 

实例:算平均数

#include<stdio.h>
int main(void)
{
	int number;
	int sum = 0;
	int count = 0;
	scanf("%d",&number);
	while(number!=-1)
	{
		sum += number;
		count++;
		scanf("%d",&number);
	}
	printf("平均值是%.2f",1.0*sum/count);
	return 0;
 } 

break和continue都只能让它所在的那一层循环停止。

实例:输入一个钱数,用一毛两毛五毛去凑

#include<stdio.h>
int main(void)
{
	int x = 2;
	int one,two,five;
	int exit = 0;
	for(one = 1;one < x*10; one++){
		for(two = 1; two < x*10/2; two++){
			for(five = 1; five < x*10/5; five++){
				if(one+two*2+five*5 == x*10)
				{
					printf("可以用%d个一角,%d个二角,%d个五角得到%d元",one,two,five,x);
					exit = 1;
					break;
				}
			}
			if (exit == 1) break;
		}
		if (exit == 1) break;
	}
	return 0;
}

但我学过了算法设计与分析,发现该程序时间复杂度达到了n的三次方,遂尝试使用回溯法,能力暂时未达到,未果。然后发现可以投机取巧使用贪心算法,遂尝试。

#include<stdio.h>
int main(void)
{
	float num;
	scanf("%f",&num);
	float x = num;
	float one = 0.1;
	float two = 0.2;
	float five = 0.5;
	int fiveCoin = 0;
	int twoCoin = 0;
	int oneCoin = 0;
	fiveCoin = x/0.5;
	x -= fiveCoin*0.5;
	twoCoin = x/0.2;
	x -= twoCoin*0.2;
	oneCoin = x/0.1;
	printf("可以用%d个一角,%d个二角,%d个五角得到%.2f元",oneCoin,twoCoin,fiveCoin,num);
	return 0;
}

该算法时间复杂度为1,嗯,不愧是我

但货币种类只有三种,我觉得太少了,我再试试改进一下,使用回溯法,未果。

感觉这些还挺重要的,首更24.01.19,之后大概会补充吧

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值