蓝桥等考-中级-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;
}
作者:newcode 更多资源请关注纽扣编程微信公众号
从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习