蓝桥等考-中级-do-while循环结构-练习

蓝桥等考-中级-do-while循环结构-练习

OpenJudge-1.5-26 统计满足条件的 4 位数个数

描述

给定若干个四位数,求出其中满足以下条件的数的个数:

个位数上的数字减去千位数上的数字,再减去百位数上的数字, 再减去十位数上的数字的结果大于零。

输入

输入为两行,第一行为四位数的个数n,第二行为n个的四位数,数与数之间以一个空格分开。(n <= 100)

输出

输出为一行,包含一个整数,表示满足条件的四位数的个数。

样例输入

5
1234 1349 6119 2123 5017

样例输出

3

解题思路

参考程序1

#include<bits/stdc++.h>
using namespace std;

int main(){
	int a,b,c,d,n,m,s=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&m);
		a=m/1000;
		b=(m/100)%10;
		c=(m/10)%10;
		d=m%10;
		if(d-a-b-c>0) s++;
	}
	printf("%d\n",s);
	return 0;
}

参考程序2

#include<bits/stdc++.h>
using namespace std;

int n,cnt;
int main(){
	cin>>n;
	while(n>0){
		n--;
		int tmp;
		cin>>tmp;
		int ge=tmp%10;
		tmp/=10;
		int shi=tmp%10;
		tmp/=10;
		int bai=tmp%10;
		tmp/=10;
		int qian=tmp%10;
		if(ge-qian-bai-shi>0){
			cnt++;
		}
	}
	cout<<cnt;
	return 0;
}

参考程序3

#include<bits/stdc++.h>
using namespace std;

int n,cnt;
int main(){
	cin>>n;
	do{
		n--;
		int tmp;
		cin>>tmp;
		int ge=tmp%10;
		tmp/=10;
		int shi=tmp%10;
		tmp/=10;
		int bai=tmp%10;
		tmp/=10;
		int qian=tmp%10;
		if(ge-qian-bai-shi>0){
			cnt++;
		}
	}while(n>0);
	cout<<cnt;
	return 0;
}

OpenJudge-1.5-32 求分数序列和

描述

有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,.... ,其中qi+1= qi+ pi, pi+1=qi, p1= 1, q1= 2。比如这个序列前6项分别是2/1,3/2,5/3,8/5,13/8,21/13。求这个分数序列的前n项之和。

输入

输入有一行,包含一个正整数n(n <= 30)。

输出

输出有一行,包含一个浮点数,表示分数序列前n项的和,精确到小数点后4位。

样例输入

2

样例输出

3.5000

解题思路

参考程序1

#include<bits/stdc++.h>
using namespace std;

int main(){
	double a=1,b=1,c,s=0;
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		c=a+b;
		a=b;
		b=c;
		s=s+(double)b/a;
		
	}
	printf("%.4lf\n",s);
	return 0;
}

参考程序2

#include<bits/stdc++.h>
using namespace std;

int n;
double ans;
int main(){
	cin>>n;
	int p=1,q=2,tmp;
	ans+=q/p;
	while(n>1){
		tmp=p+q;
		p=q;
		q=tmp;
		ans+=q*1.0/p;
		n--;
	}
	cout<<fixed<<setprecision(4)<<ans;
	return 0;
}

参考程序3

#include<bits/stdc++.h>
using namespace std;

int n;
double ans;
int main(){
	cin>>n;
	int p=1,q=2,tmp;
	ans+=q/p;
	do{
		tmp=p+q;
		p=q;
		q=tmp;
		ans+=q*1.0/p;
		n--;
	}while(n>1);
	cout<<fixed<<setprecision(4)<<ans;
	return 0;
}

OpenJudge-1.5-45 金币

描述

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。

你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。

输入

一个整数(范围1到10000),表示天数。

输出

骑士获得的金币数。

样例输入

6

样例输出

14

解题思路

参考程序1

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, sum = 0, d = 0, i = 1;//sum:获得的总金币 d:阶段数 i:天数
    cin>>n;
    while(i <= n)//每次while循环,发放一个阶段的金币 
    {
        d++;
        for(int j = 1; j <= d; j++)
        {
            sum += d;
            i++;
            if (i > n)
                break;
        }
    }
    cout<<sum;
    return 0;
}

参考程序2

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n,sum=0,d=0,i=1;//sum:获得的总金币 d:阶段数 i:天数
    cin>>n;
    do{//每次while循环,发放一个阶段的金币
        d++;
        for(int j=1;j<=d;j++){
            sum+=d;
            i++;
            if (i>n)
                break;
        }
    }while(i<=n);
    cout<<sum;
    return 0;
}

OpenJudge-小学奥数-7831 计算星期几

描述

假设今天是星期日,那么过ab天之后是星期几?

输入

两个正整数a,b,中间用单个空格隔开。0 < a <= 100, 0 < b <= 10000。

输出

一个字符串,代表过ab天之后是星期几。
其中,Monday是星期一,Tuesday是星期二,Wednesday是星期三,Thursday是星期四,Friday是星期五,Saturday是星期六,Sunday是星期日。

样例输入

3 2000

样例输出

Tuesday

解题思路

参考程序1

#include<bits/stdc++.h>
using namespace std;

int a,b;
string days[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int qpow(int a,int b,int mod){
	int res=1;
	while(b>0){
		if(b%2==1){
			res=res*a;
			res%=mod;
		}
		a*=a;
		a%=mod;
		b/=2;
	}
	return res;
}

int main(){
	cin>>a>>b;
	cout<<days[qpow(a,b,7)];
	return 0;
}

参考程序2

#include<bits/stdc++.h>
using namespace std;

int a,b;
string days[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int qpow(int a,int b,int mod){
	int res=1;
	do{
		if(b%2==1){
			res=res*a;
			res%=mod;
		}
		a*=a;
		a%=mod;
		b/=2;
	}while(b>0);
	return res;
}

int main(){
	cin>>a>>b;
	cout<<days[qpow(a,b,7)];
	return 0;
}

OpenJudge-小学奥数-7833 幂的末尾

描述

幂ab的末3位数是多少?

输入

两个正整数a,b。1 <= a <= 100,1 <= b <= 10000。

输出

从高位到低位输出幂的末三位数字,中间无分隔符。若幂本身不足三位,在前面补零。

样例输入

7 2011

样例输出

743

解题思路

参考程序1

#include<bits/stdc++.h>
using namespace std;

int qpow(int a,int b,int mod){
	int res=1;
	while(b>0){
		if(b%2==1){
			res*=a;
			res%=mod;
		}
		a*=a;
		a%=mod;
		b/=2;
	}
	return res;
}

int main(){
	int a,b;
	cin>>a>>b;
	int ans=qpow(a,b,1000);
	if(ans<10){
		cout<<"00";
	}else if(ans<100){
		cout<<"0";
	}
	cout<<ans;
	
	return 0;
}

参考程序2

#include<bits/stdc++.h>
using namespace std;

int qpow(int a,int b,int mod){
	int res=1;
	do{
		if(b%2==1){
			res*=a;
			res%=mod;
		}
		a*=a;
		a%=mod;
		b/=2;
	}while(b>0);
	return res;
}

int main(){
	int a,b;
	cin>>a>>b;
	int ans=qpow(a,b,1000);
	if(ans<10){
		cout<<"00";
	}else if(ans<100){
		cout<<"0";
	}
	cout<<ans;
	
	return 0;
}
posted @ 2023-03-17 16:31  new-code  阅读(57)  评论(0编辑  收藏  举报