欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分支与循环--洛谷练习

程序员文章站 2022-04-06 11:41:30
...

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;
}