杭电OJ | 2033 2070 2071 2075 2089 2090 2092 2096 2097 2098 2099

2033 人见人爱A+B

Input       输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。题目保证所有的数据合法。

Output    对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0~59),每个输出占一行,并且所有的部分都可以用32位整数表示。

Sample Input

2

1 2 3 4 5 6

34 45 56 12 23 34

Sample Output

5 7 9

47 9 30

#include<stdio.h>
int main()
{
    int inputnum;
    scanf("%d",&inputnum); 
    for(; inputnum!=0; inputnum--){
    	int ahour,amin,asec,bhour,bmin,bsec,chour,cmin,csec;
    	scanf("%d%d%d%d%d%d",&ahour,&amin,&asec,&bhour,&bmin,&bsec);
    	csec = (asec+bsec)%60;
    	if((asec+bsec)/60==1){
    		cmin = (amin+bmin)%60+1;
    		bmin++;     //进1
		}
		else{
			cmin = (amin+bmin)%60;
		}
		if((amin+bmin)/60==1){
			chour = ahour+bhour+1; 
		}
		else{
			chour = ahour+bhour;
		}
		printf("%d %d %d\n",chour,cmin,csec);
	}
    return 0;
}

2070 Fibbonacci Number

Problem Description    The fibbonacci function is defined as such: f(0) = 0 f(1) = 1 f(n) = f(n-1) + f(n-2)
Your program should be able to handle values of n in the range 0 to 50.

Input

Each test case consists of one integer n in a single line where 0≤n≤50. The input is terminated by -1.

Output

Print out the answer in a single line for each test case.

Sample Input

3 4 5 -1

Sample Output

2 3 5

#include<stdio.h>
int main() 
{
	__int64 list[51];
	list[0] = 0;
	list[1] = 1;
	int i;
	for (i=2; i<51; i++) {
		list[i] = list[i-1]+list[i-2];
	}
	int inputnum;
	while((scanf("%d",&inputnum)!=EOF)&&(inputnum!=-1)) {
		printf("%I64dn",list[inputnum]);
	}
    return 0;
}

2071 Max Num

Input    There are some cases. The first line contains an integer t, indicate the cases; Each case have an integer n ( 1 ≤ n ≤ 100 ) , followed n students’ height.

Output    For each case output the highest height, the height to two decimal plases;

Sample Input

2

3 170.00 165.00 180.00

4 165.00 182.00 172.00 160.00

Sample Output

180.00

182.00

#include<stdio.h>
int main()
{
    int inputnum;
    while(scanf("%d",&inputnum)!=EOF){
    	for(; inputnum!=0; inputnum--){
    		int i,group;
    		scanf("%d",&group);
    		double max = 0.00;
    		double num;
    		for(i=0; i<group; i++){
    			scanf("%lf",&num);
    			if(num>max){
    				max = num;
				}
			}
			printf("%.2f\n",max);
		}
	} 
    return 0;
}

2075 A|B?

Input     输入数据的第一行是一个数据T,表示有T组数据。每组数据有两个正整数A和B(A,B<10^9)。

Output  对于每组输入数据,输出"YES"表示可以被整除,"NO"表示不能被整除。

Sample Input

2 4 2 5 3

Sample Output

YES NO

#include<stdio.h>
int main()
{
    int inputnum;
    while(scanf("%d",&inputnum)!=EOF){
    	for(; inputnum!=0; inputnum--){
    		int a,b;
    		scanf("%d%d",&a,&b);
    		if(a%b==0){
    			printf("YES\n");
			}
			else{
				printf("NO\n");
			}
		}
	} 
    return 0;
}

2089 不要62

Problem Description    不吉利的数字为所有含有4或62的号码。

Input

输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。

Output

对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。

Sample Input

1 100 0 0

Sample Output

80

下面的代码会Time Limit Exceeded。但是确实是对的...

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a,b;
    while((scanf("%d%d",&a,&b)!=EOF)&&(a!=0||b!=0)){
    	int count = 0;
    	for(; a<=b;a++){
    		char now[10];
    		itoa(a,now,10);
    		if(strstr(now,"4")==NULL&&strstr(now,"62")==NULL){
    			count++;
			}
		}
		printf("%d\n",count);
	} 
    return 0;
}

2090 算菜价

Input       输入含有一些数据组,每组数据包括菜种(字串),数量(计量单位不论,一律为double型数)和单价(double型数,表示人民币元数),因此,每组数据的菜价就是数量乘上单价啊。菜种、数量和单价之间都有空格隔开的。

Output    支付菜价的时候,由于最小支付单位是角,所以总是在支付的时候把分头去掉。最后,请输出一个精度为角的菜价总量。

Sample Input

青菜 1 2 罗卜 2 1.5 鸡腿 2 4.2

Sample Output

13.4

#include<stdio.h>
int main(){
    char name[100];
    double num, cost;
	double sum = 0;
    while(scanf("%s%lf%lf",name,&num,&cost)!=EOF){ 
		sum = sum+num*cost;
	}
	printf("%.1lf\n",sum);
    return 0;
}

2092 整数解

Problem Description    有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数

Input     输入数据为成对出现的整数n,m(-10000<n,m<10000),它们分别表示整数的和与积,如果两者都为0,则输入结束。

Output  只需要对于每个n和m,输出“Yes”或者“No”,明确有还是没有这种整数就行了。

Sample Input

9 15 5 4 1 -56 0 0

Sample Output

No Yes Yes

#include<stdio.h>
int main(){
	int n,m;
	while((scanf("%d%d",&n,&m)!=EOF)&&(n!=0||m!=0)){
		int x = -9999;
		int i,flag = 0;
		for(i=-9999; i<=9999; i++){
			if(i*(n-i)==m){           //y=n-x, 求解x(n-x)=m
				flag = 1;
				break;
			}
		}
		if(flag==0){
			printf("No\n");
		}
		else if(flag==1){
			printf("Yes\n");
		}
	}
    return 0;
}

2096 小明A+B

Problem Description
对于大于等于100的整数, 小明仅保留该数的最后两位进行计算, 如果计算结果大于等于100, 那么小明也仅保留计算结果的最后两位.

Input      输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两个非负整数A和B

Output   对于每组测试数据, 输出小明A+B的结果.

Sample Input

2 35 80 15 1152

Sample Output

15 67

#include<stdio.h>
int main()
{
    int inputnum;
    scanf("%d",&inputnum);
    for(; inputnum!=0; inputnum--){
    	int a,b;
    	scanf("%d%d",&a,&b);
    	if(a>=100||b>=100){
    		a = a%100;
    		b = b%100;
		}
		printf("%d\n",(a+b)%100);
	}
	return 0;
}

Sky数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 33963    Accepted Submission(s): 18931


 

Problem Description   一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和也为22,同时它的十二进制数表示1894,其四位数字之和也为22,由于他的发现,所以这里我们命名其为Sky数。

Input         输入含有一些四位正整数,如果为0,则输入结束。

Output      若n为Sky数,则输出“#n is a Sky Number.”,否则输出“#n is not a Sky Number.”。每个结果占一行。

Sample Input

2992 1234 0

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
	int num;
	while((scanf("%d",&num)!=EOF)&&(num!=0)){
		if((solve(num,10)==solve(num,12))&&(solve(num,10)==solve(num,16))&&(solve(num,12)==solve(num,16))){
			printf("%d is a Sky Number.\n",num);
		}
		else{
			printf("%d is not a Sky Number.\n",num);
		}
	}
    return 0;
}
int solve(int num, int base){
	int sum = 0;
	int quo = num;
	int remain;
	while(quo!=0){
		remain = quo%base;
		sum = sum+remain;
		quo = quo/base;
	}
	return sum;
}

2098 分拆素数和

Problem Description

把一个偶数拆成两个不同素数的和,有几种拆法呢?

Input      输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。

Output   对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。

Sample Input

30 26 0

Sample Output

3 2

#include<stdio.h>
#include<math.h>
int main()
{
	int prime[10000];
	int i,j;
	int index=0;
	for(i=2; i<10000; i++){
		int flag = 1;
		for(j=2; j<=sqrt(i); j++){
			if(i%j==0){
				flag = 0;
			}
		}
		if(flag==1){
			prime[index] = i;
			index++;
		}
	}
    int num;
    while((scanf("%d",&num)!=EOF)&&(num!=0)){
    	int count=0;
    	for(i=0; i<=num; i++){
    		if(prime[i]>=num){
    			break;
			}
			for(j=0; j<num; j++){
				if(prime[j]>=num){
					break;
				}
				if(prime[i]+prime[j]==num){
					count++;
				}
			}
		}
		printf("%d\n",count/2);
	}
	return 0;
}

2099 整除的尾数

Problem Description  一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?

Input    输入数据有若干组,每组数据包含二个整数a,b(0<a<10000, 10<b<100),若遇到0 0则处理结束。

Output

对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。

Sample Input

200 40

1992 95

0 0

Sample Output

00 40 80

15

#include<stdio.h>
int main(){
	int a,b;
	while((scanf("%d%d",&a,&b)!=EOF)&&(a!=0||b!=0)){
		int i,count = 0;
		for(i=a*100; i<=a*100+99; i++){
			if(i%b==0){
				if(count==0){
					if(i<=a*100+9){
						printf("0");
						printf("%d",i%100);
					}
					else{
						printf("%d",i%100);
					}
				}
				else{
					if(i<=a*100+9){
						printf(" 0");
						printf("%d",i%100);
					}
					else{
						printf(" %d",i%100);
					}
				}
				count++;
			}
		}
		printf("\n");
	}
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值