XDOJ试题

跳一跳

​
标题	
跳一跳

类别
流程控制
	
时间限制	
1S

内存限制	
256Kb

问题描述	
跳一跳是一款微信小游戏,游戏规则非常简单,只需玩家要从一个方块跳到下一个方块,如果未能成功跳到下一个方块则游戏结束。
计分规则如下:
1. 如果成功跳到下一个方块上,但未跳到方块中心,加12. 如果成功跳到下一个方块上,且刚好跳到方块中心,则第一次加2分,此后连续跳到中心时每次递增2分。也就是说,第一次跳到方块中心加2分,连续第二次跳到方块中心加4分,连续第三次跳到方块中心加6分,…,以此类推。
3. 如果未能成功跳到方块上,加0分,且游戏结束
现在给出玩家一局游戏的每次跳跃情况,请计算玩家最终得分。

输入说明	
输入为若干个非零整数(整数个数小于1000),表示玩家每次的跳跃情况。整数之间用空格分隔,整数取值为0120 表示未能成功跳到下一个方块上,
1 表示成功跳到下一个方块上但未跳到方块中心,
2 表示成功跳到下一个方块上,且刚好跳到方块中心。
输入的数据只有最后一个整数是0,其余均非零。

输出说明	
输出一个整数表示该玩家的最终得分。

输入样例	
1 1 2 1 2 2 2 0

输出样例	
17
#include <stdio.h>
int main(){
	int num[100];
	int i = 0,sum = 0;
	int count = 1,flag = 0;
    for(i=0;i<100;i++){
    	scanf("%d",&num[i]);
    	if(num[i]==0){
    		break;
		}else if(num[i]==1){
			sum+=1;
			flag =0;
			count =1;
		}else if(num[i]==2){
			if(flag==0){
				sum+=2;
				flag = 1;
				count++;
			}else if(flag == 1){
				sum = sum+2*count;
				count++;
			}
		}
		
			}
			printf("%d",sum);
	return 0;
}

完全平方数

​
标题	
完全平方数

类别
基本计算

时间限制	
1S

内存限制	
256Kb

问题描述	
若一个整数n能表示成某个整数m的平方的形式,则称这个数为完全平方数。写一个程序判断输入的整数是不是完全平方数。

输入说明	
输入数据为一个整数n,0<=n<10000000。

输出说明	
如果n是完全平方数,则输出构成这个完全平方数的整数m,否则输出no。

输入样例	
样例1144
样例215

输出样例	
样例1输出:
12
样例2输出:
no

​`在这里插入代码片`
#include <stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	int i = 1;
	for(i=1;i<n/2;i++){
		if(n == i*i)
		  break;
	}
	if(i == n/2){
		printf("no");
	}else printf("%d",i);
	return 0;
}

成绩分级2

​
标题
成绩分级

描述
给出一个百分制的成绩,要求输出成绩等级'A','B','C','D','E'90分以上为'A'80~89分为'B'70~79分为'C'60~69分为'D'60分以下为'E'。

时间限制
1	

内存限制
10000	

类别
1

输入说明
输入一个百分制成绩,浮点型,如78.5。

输出说明
输出成绩和等级,成绩保留两位小数,如78.50 C	

输入样例
78.5

输出样例
78.50 C	

提示
格式输出%.2f %c

​
#include <stdio.h>
int main(){
	float score;
	scanf("%f",&score);
	printf("%.2f ",score); 
	int t;
	t = score/10;
	switch(t){
		case 10:
			case 9:printf("A");break;
			case 8:printf("B");break;
			case 7:printf("C");break;
			case 6:printf("D");break;
			default :printf("E");break; 
				}
	return 0;
}

日期计算

​
标题	
日期计算

类别
流程控制

时间限制	
1S

内存限制	
256Kb

问题描述	
给定一个年份y和一个整数d,问这一年的第d天是几月几日?   
注意闰年的2月有29天,且满足下面条件之一的是闰年:   
1) 年份是4的整数倍,而且不是100的整数倍;
2) 年份是400的整数倍

输入说明	
输入包含两个整数y和d,y表示年份,年份在19002018之间(包含19002018)。 d表示这一年的第几天,d在1365之间。

输出说明	
在一行输出两个整数,分别表示答案的月份和日期。

输入样例	
2015 80

输出样例	
3  21
#include <stdio.h>
int main(){
	int year,day;
	int sum = 0;
	scanf("%d %d",&year,&day);
	int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	if((year%4==0&&year%100!=0)||year%400==0){
		m[1] = 29;
	}
	for(int i = 0;i<12;i++){
	    sum = sum + m[i];
		if(sum == day){
			printf("%d %d",i+1,m[i]);
			break;
		}else if(sum > day){
			printf("%d %d",i+1,day-sum+m[i]);
			break;
		}	
	}
	return 0;
}

平均数

​
标题	
平均数

类别	
流程控制

时间限制	
1S

内存限制	
1000Kb

问题描述	
计算n个整数(x1,x2,x3...)的平均数,结果保留两位小数。

输入说明	
第一行为整数n(1 <= n <=100),接下来是n个整数(0 <= x1,x2,x3....<= 2^31 - 1)。

输出说明	
输出这n个整数的平均数,结果保留两位小数。

输入样例	
5
2 3 1 4 5

输出样例	
3.00
#include <stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	double num[n],sum = 0;
	for(int i = 0;i<n;i++){
		scanf("%lf",&num[i]);
		sum = sum+num[i];
	}
	printf("%.2lf",sum/n);
	
	return 0;
}

整数比较1

​
Problem 1 整数比较1
描述:
编写程序,对于从键盘输入的2个整数,先输出较大者的个位数字,然后输出较小者的平方值。
输入说明:
输入的两个整数之间以一个空格分隔。
输出说明:
在一行上输出两个整数,整数之间以一个空格分隔,最后换行。
输入样例
样例1输入
29989  372
输出样例
样例1输出
9 138384
#include <stdio.h>
int main(){
	int a,b;
	scanf("%d %d",&a,&b);
	int max,min;
	max = a>=b?a:b;
	min = a<=b?a:b;
	printf("%d %d",max%10,min*min);
	return 0;
}

整数比较2

​
Problem 3整数比较3
描述:
从键盘输入四个整数,要求按由小到大的顺序输出。
输入说明:
输入四个整数,以空格间隔。
输出说明:
输出排序后的整数,以空格间隔。
输入样例
样例1输入
-99 9 99 -9
输出样例
样例1输出
-99 -9 9 99
#include <stdio.h>
int main(){
	int n[4];
	int i,j;
	for(i = 0;i<4;i++){
		scanf("%d",&n[i]);
	}
	for(i = 0;i<3;i++){
		for(j=i+1;j<4;j++){
			if(n[j]<n[i]){
				int t;
				t = n[i];
				n[i]=n[j];
				n[j]=t;
			}
		}
	}
	for(i=0;i<4;i++){
		printf("%d ",n[i]);
	}
	return 0;
}

输出26个字母

​
Problem 1	输出26个英文字母
描述:
编写一个程序,分别按正向和逆向输出小写字母。   
输入说明:
无。
输出说明:
字母间以空格分隔,正向输出完换行,再逆向输出。
输入样例
无。
输出样例
无。

​
#include <stdio.h>
int main(){
	int i = 97;
     for(i=97;i<123;i++){
     	printf("%c ",i);
	 }
	 printf("\n"); 
	 for(i = 122;i>96;i--){
	 	printf("%c ",i);
}	return 0;
}

四位密码器

​
标题
四位密码器

描述
编制密码转换方式:大写字母-->小写字母,小写字母-->大写字母,数字-->*,其它符号-->@。

时间限制
1	

内存限制
10000	

类别
1

输入说明
输入函数使用scanf,格式%c控制。	

输出说明
输出密码转换后的结果。	

输入样例
A2c&

输出样例
a*C@	

提示
输入四位密码字符,如A2c&
#include <stdio.h>
int main(){
	char c[4];
	for(int i=0;i<4;i++){
		scanf("%c",&c[i]);
		if(c[i]>='a'&&c[i]<='z'){
			printf("%c",c[i]-32);
		}else if(c[i]>='A'&&c[i]<='Z'){
			printf("%c",c[i]+32);
		}else if(c[i]>='0'&&c[i]<='9'){
			printf("*");
		}else {
		printf("@");}
	}
	return 0;
}

股票

5.股票

题目描述:
小明热爱炒股,经过一番分析之后,他决定投入一笔资金买入一定数量的某只股票。
之后连续n天,他每天都关注这支股票并进行交易,但不会追加资金,即他只会用卖股票的钱买入股票。
现在给出他首次买入股票时的价格和数量,以及其后每天股票的价格和他的交易数量,
请计算n天之后他的资产(股票总值 + 现金)。


输入描述:
输入数据由若干行构成,第一行为三个正整数m,p,n。
m表示首次买入股票数量(0<m<10000),p表示首次买入价格(0<p<=100),n表示之后进行股票交易的天数(0<n<50)。

其后是n行数据,每行包括两个整数k和d,k表示当天交易数量(-10000<k<10000),
正数表示买入,负数表示卖出;d表示当天股票价格(0<d<=100)。


输出描述:
输出一个整数表示n天后小明的资产(股票总值 + 现金)。


输入样例:
100 10 5

-30 12

-30 18

20 12

30 10

20 12



输出样例:
1440
#include <stdio.h>
int main(){
	int m,p,n;
	int sum = 0;
	scanf("%d %d %d",&m,&p,&n);
	int num[n][2];
	int i = 0,j = 0;
	for(i = 0;i<n;i++){
		for(j = 0;j<2;j++){
			scanf("%d",&num[i][j]);
		}
		sum = sum + num[i][0]*num[i][1];
	}
	int fm = m;
	for(i=0;i<n;i++){
		fm = fm + num[i][0];
			}
			int final;
			final = fm*num[n-1][1]-sum;
             printf("%d",final);
	return 0;
}

阶乘之和

​
标题
阶乘之和

描述
输入自然数N(N<10),采用双层for循环结构,计算N!和ΣN!,并输出结果。

时间限制
1	

内存限制
10000	

类别
1

输入说明
输入自然数N(<10),如7	

输出说明
输出N、N!、ΣN!	

输入样例
7

输出样例
7 5040 5913

提示
采用双层for循环结构,不大于10的自然数的阶乘之和

​
#include <stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	printf("%d ",n);
	int i = 0,m = 1;
	int sum = 0;
	for(i=1;i<=n;i++){
		m = m*i;
		sum = sum +m;
	}
	printf("%d %d",m,sum);
	return 0;
}

交错序列前N 项之和

​
题目描述:编写程序,计算交错序列1-2/3+3/5-4/7+5/9-6/11+…的前N项之和。

输入格式:输入一个正整数

输出格式:输出计算结果,结果保留三位小数

示例:
输入:5
输出:0.917
#include <stdio.h>
int main(){
	int n;
	float sum =0,t;
	scanf("%d",&n);
	float num = 1,den = 1,flag = 1;
	for(num=1;num<=n;num++,den+=2){
		t = flag*num/den;
		sum+=t;
		flag = -flag;
	}
	printf("%.3f",sum);
	return 0;
}

求奇数之和

​
题目描述:计算给定一组整数中奇数的和,直到遇到0时结束。

输入格式:共一行,输入一组整数,以空格分隔

输出格式:输出一个整数

示例:
输入:1 2 3 4 5 0 6 7 
输出:9
#include <stdio.h>
int main(){
	int num[100];
	int sum = 0;
	for(int i = 0;i<100;i++){
		scanf("%d",&num[i]);
		if(num[i]==0){
			break;
		}else if(num[i]%2==1){
			sum = sum+num[i];
		}
	}
	printf("%d",sum);
	return 0; 
}

英文表示数字

​
题目描述:输入一个0~9的一位整数,输出其对应的英文单词。要求用switch结构完成。

示例:
输入:0
输出:zero
输入:8
输出:eight

​
#include <stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	switch(n){
		case 0:printf("zero");
		break;
		case 1:
			printf("one");break;
			case 2:
			printf("two");break;
			case 3:
				printf("three");break;
				case 4:
					printf("four");break;
					case 5:
						printf("five");break;
						case 6:
						printf("six");break;
						case 7:
						printf("seven");break;
						case 8:
						printf("eight")	;break;
						case 9:
						printf("nine");break;
					
	}; 
	return 0;
}

阶梯电价计算

​
标题
阶梯电价计算

描述
电价分三个档次,一档:0~110(110)度电,每度电0.5元;二挡:110~210(210)度电,超出110部分每度电0.55元;三挡:超过210度电,超出210部分每度电0.70元,给出一个家庭一月用电量,请计算出应缴的电费。

时间限制
1	

内存限制
10000	

类别
1

输入说明
输入一月用电量,正实数,如70.5。

输出说明
输出应缴电费、档次和该档超额使用的电量数据,档次使用字母A、B和C表示,分别对应一、二和三档,电量和电费使用浮点型,结果四舍五入,保留小数点后两位小数	

输入样例
70.5

输出样例
35.25 A 0.00	

提示
格式输出%.2f %c %.2f
#include <stdio.h>
int main(){
	float u,fee;
	scanf("%f",&u);
	if(u<=110){
		fee = 0.5*u;
		printf("%.2f A 0.00",fee);
	}else if(u>110&&u<=210){
		fee = 110*0.5+(u-110)*0.55;0;
		printf("%.2f B %.2f",fee,u-110);
	}else {
	fee = 110*0.5+100*0.55+(u-210)*0.70;
	printf("%.2f C %.2f",fee,u-110);
}
	return 0;
}

循环队列

假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。试给出判别此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队算法中要返回队头元素)。


输入样例:
5
123456
输出样例:
1234
1


解释:
输入说明:
1. 输入队列长度m:52.向队列逐个放入元素:123456。

输出说明:
1.输出队列里所有元素:1234(使用不另设标志的队满判别方式,使得长度为5的队列最多只能放4个元素)。
2.将队头出队,返回,输出:1
在这里插入代码片

分段函数1

题目描述: 编写程序计算分段函数f(x)的值。
        x^1/2  (x>=0)
f(x)=
        (x+1)^2+2x+1/x  (x<0)
输入格式:输入实数x的值

输出格式:输出f(x)的值,结果保留两位小数。

示例:
输入:4
输出:2.00
#include <stdio.h>
#include <math.h>
int main(){
	float x,f;
	scanf("%f",&x);
	if(x>=0){
		f = sqrt(x);
	}else if(x<0){
		f = (x+1)*(x+1)+2*x+1/x;
	}
	printf("%.2f",f);
	return 0;
}

分段函数2

题目:分段函数
时间限制:1S
内存限制:10000Kb
问题描述:
有一个函数:
    x  (x<1)
y = 2x-1    (1<=x<10)
    3x-11   (x>=10)

编程输出其函数值。
输入说明:
输入自变量x(输入必须为整数)
输出对应的函数值。
输入样例:
3
输出样例:
5
#include <stdio.h>
int main(){
	int x,y;
	scanf("%d",&x);
	if(x<1){
		y = x;
	}else if(x>=1&&x<10){
		y=2*x-1;
	}else y=3*x-11;
	printf("%d",y);
	return 0;
}

利润计算

题目:利润计算
时间限制:1S
内存限制:10000Kb
问题描述: 
企业发放的奖金根据利润提成。利润I低于或者等于100000元的,奖金可提10%润高于100000元低于200000元时(100000<=I<=200000),低于100000元的部分按照10%提成,高于100000元的部分,可提成7.5%;
(200000<=I<=400000)时,低于200000元的部分仍按上述办法提成(下同)。高于200000元的部分按5%提成;
(200000<=I<=600000)元时,高于400000元的部分按3%提成;时,高于600000元的部分按照1.5%提成;I>1000000时,超过1000000元的部分按1%提成。
从键盘输入当月利润I,求应发奖金总数。
输入说明:
从键盘输入当月利润I。
输出说明:
输出当月应发的奖金总数,结果保留两位小数。
输入样例:
150000
输出样例:
13750.00
#include <stdio.h>
int main(){
	float n,bon;
	scanf("%f",&n);
	if(n<=100000){
		bon = n*0.1;
	}else if(n>=100000&&n<=200000){
		bon = 100000*0.1+(n-100000)*0.075;
	}else if(n>=200000&&n<=400000){
		bon=100000*0.1+100000+0.075+(n-200000)*0.05;
	}else if(n>=400000&&n<=600000){
		bon=100000*0.1+100000*0.075+200000*0.05+(n-400000)*0.03;
	}else if(n>=600000&&n<=1000000){
		bon=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(n-600000)*0.015;}
		else if(n>=1000000){
		bon=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(n-1000000)*0.01;}
		printf("%.2f",bon);
		return 0;
} 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值