分支与循环--洛谷练习

P1423 小玉在游泳
题目描述
小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
输入输出格式
输入格式
一行内输入一串整数,以0结束,以空格间隔。

输出格式
一行内倒着输出这一串整数,以空格间隔。

输入输出样例
输入样例#1:
4.3
输出样例#1:
3

#include <iostream>
using namespace std;

int main()
{
	float x,sum=2,step=2;
	int n=1;
	cin>>x;
	if(x<=2)  //如果目标距离小于2,就只需要一步,如果大于2,就按照题目要求每一次乘0.98
		n=1;
	else{
		while(sum<x)
		{
			step = step*0.98;//计算当前步的距离
			sum=sum+step;
			n++;
		}
		
	}
	cout<<n;
	
	return 0;
}

P1424 小鱼的航程(改进版)
题目描述
有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x(1\le x \le 7)x(1≤x≤7) 开始算起,过了 n(n\le 10^6)n(n≤10
6
) 天以后,小鱼一共累计游泳了多少公里呢?

输入输出格式
输入格式:
输入两个整数x,n(表示从周x算起,经过n天)。

输出格式:
输出一个整数,表示小鱼累计游泳了多少公里。

输入输出样例
输入样例#1:
3 10
输出样例#1:
2000
思路:直接分为四种情况,主要看前面和后面有没有剩余的零头

#include <iostream>
using namespace std;

int main()
{
	int x,n,k,t;
	long long sum=0;
	cin>>x>>n;
	k = 7-x+1;
	t = (n-k)%7;
	if(k<=2&&t<=5){  //前面无剩余(在周末开始),后面有剩余(不包含周末)
		sum=(n-k)/7*5*250+t*250;
	}else if(k>=2&&t<=5){//前面有剩余(不是在周末开始),后面有剩余(不包含周末)
		sum=(k-2)*250+(n-k)/7*5*250+t*250;
	}else if(k<=2&&t>5){//前面没有剩余(在周末开始),后面有剩余(但包含周末)
		sum=(n-k)/7*5*250+5*250;
	}else if(k>=2&&t>5){//前面有剩余(不在周末开始),后面有剩余(但包含周末)
		sum=(k-2)*250+(n-k)/7*5*250+5*250;
	}
	cout<<sum;
	
	return 0;
}

P1089 津津的储蓄计划
题目描述
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100100元或恰好100100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如1111月初津津手中还有8383元,妈妈给了津津300300元。津津预计1111月的花销是180180元,那么她就会在妈妈那里存200200元,自己留下183183元。到了1111月月末,津津手中会剩下33元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

输入输出格式
输入格式:
1212行数据,每行包含一个小于350350的非负整数,分别表示11月到1212月津津的预算。

输出格式:
一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X−X,XX表示出现这种情况的第一个月;否则输出到20042004年年末津津手中会有多少钱。

注意,洛谷不需要进行文件输入输出,而是标准输入输出。

输入输出样例
输入样例#1:
290
230
280
200
300
170
340
50
90
80
200
60
输出样例#1:
-7
输入样例#2:
290
230
280
200
300
170
330
50
90
80
200
60
输出样例#2:
1580

#include <iostream>
using namespace std;

int main()
{
	int a[12],save=0,rest=0;
	for(int i=0;i<12;i++)
		cin>>a[i];
	
	for(int i=0;i<12;i++){
		save = ((300+rest-a[i])/100)*100+save;
		rest = (300+rest-a[i])-((300+rest-a[i])/100)*100;
		if(rest<0){
				cout<<"-"<<i+1;
				return 0;
		} 	
	}
	cout<<save*1.2+rest;
	
	return 0;
}

P1085 不高兴的津津
题目描述
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

输入输出格式
输入格式:
输入包括77行数据,分别表示周一到周日的日程安排。每行包括两个小于1010的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出格式:
一个数字。如果不会不高兴则输出00,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 71,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

输入输出样例
输入样例#1:
5 3
6 2
7 2
5 3
5 4
0 4
0 6
输出样例#1:
3

#include <iostream>
using namespace std;

int main()
{
	int a[7],b[7],c[7],max=0;
	for(int i=0;i<7;i++)
	{
		cin>>a[i]>>b[i];
		c[i]=a[i]+b[i];
	}	
	
	for(int i=0;i<7;i++)
		if(c[i]>max) max=c[i];		
	
	for(int i=0;i<7;i++)
		if(c[i]==max)
		{
			cout<<i+1;
			break;
		}
	
	return 0;
 } 

P1980 计数问题
题目描述
试计算在区间 11 到 n n的所有整数中,数字 x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到 11 11中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 11 出现了 44 次。

输入输出格式
输入格式:
22个整数n,xn,x,之间用一个空格隔开。

输出格式:
11个整数,表示xx出现的次数。

输入输出样例
输入样例#1:
11 1
输出样例#1:
4
说明
对于 100%100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 91≤n≤1,000,000,0≤x≤9。

#include <iostream>
using namespace std;

int main()
{
	int n,x,temp,t,k=0; 
	cin>>n>>x;
	
	for(int i=1;i<=n;i++)
	{
		temp = i;
		while(temp){
			t=temp%10;
			temp=temp/10;
			if(t==x) k++;
		}		
		
	}
	cout<<k;
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43090158/article/details/94406606