杭电OJ | 2006、2007、2008、2009、2010、2011、2039 奇偶正负数值统计、水仙花数、符号切换、三角形

2006

Problem Description         给你n个整数,求他们中所有奇数的乘积。

Input           输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。

Output        输出每组数中的所有奇数的乘积,对于测试实例,输出一行。

Sample Input

3 1 2 3

4 2 3 4 5

Sample Output

3

15

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

2007

Problem Description      给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。

Input           输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。

Output        对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。你可以认为32位整数足以保存结果。

Sample Input

1 3

2 5

Sample Output

4 28

20 152

要点:判断两个数的大小

#include <stdio.h>
int main()
{
    int a,b,temp;
    while(scanf("%d %d",&a,&b)!=EOF){
    	if(b<a){
    		temp = a;
    		a = b;
    		b = temp;
	}
    	int evensum=0, oddsum = 0;
    	for(;a!=b+1;a++){
    		if(a%2==1){
    		    oddsum = oddsum + a*a*a;
		}
		else if(a%2==0){
		    evensum = evensum + a*a;
		}
	}
	printf("%d %d\n",evensum, oddsum);
   }
    return 0;
}

2008

Problem Description       统计给定的n个数中,负数、零和正数的个数。

Input         输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。

Output      对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。

Sample Input

6 0 1 2 3 -1 0

5 1 2 3 4 0.5

0

Sample Output

1 2 3

0 0 5

#include <stdio.h>
int main()
{
    int inputnum;
    while(scanf("%d",&inputnum)!=EOF&&inputnum){
    	int negative=0, zero=0, positive=0;
    	for(;inputnum!=0;inputnum--){
            double a;
            scanf("%lf",&a);
            if(a==0){
                zero=zero+1;
            }
            else if(a<0){
                negative=negative+1;
            }
            else{
                positive=positive+1;
            }
        }
        printf("%d %d %d\n",negative,zero,positive);
    }
    return 0;
}

2009

Problem Description      数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。

Input        输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。

Output     对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。

Sample Input

81 4

2 2

Sample Output

94.73

3.41

#include <stdio.h>
#include <math.h>
int main()
{
    int item, num;
    while(scanf("%d %d",&item, &num)!=EOF){
    	double sum = (double)item;
    	double nowitem = (double)item;
    	for(;num!=1;num--){
    		nowitem = sqrt(nowitem);
    		sum = sum + nowitem;
	}
	printf("%.2f\n",sum);
    }
    return 0;
}

2010

Problem Description     “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。

Input          输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。

Output       对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开; 如果给定的范围内不存在水仙花数,则输出no; 每个测试实例的输出占一行。

Sample Input

100 120

300 380

Sample Output

no

370 371

要点:注意输出...

#include <stdio.h>
int main()
{
    int m, n;
    while(scanf("%d %d",&m, &n)!=EOF){
        int count = 0;
        for(;m!=n+1;m++){
            int third = m%10;
            int remain = m/10;
            int first = remain/10;
            int second = remain%10;
    		
            if(m==first*first*first+second*second*second+third*third*third){
               if(count>0){
                    printf(" ");
                }
                printf("%d",m);
                count++;
            }
        }
        if(count==0){
            printf("no");
        }
        printf("\n");
    }
    return 0;
}

2011

Problem Description        多项式的描述如下:1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...   现在请你求出该多项式的前n项的和。

Input               输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。

Output            对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。

Sample Input

2

1 2

Sample Output

1.00

0.50

#include <stdio.h>
int main()
{
    int inputnum;
    scanf("%d",&inputnum);
    for(;inputnum!=0;inputnum--){
    	int m;
    	scanf("%d",&m);
    	double sum = 0.0;
    	int count=1;
    	for(;count!=m+1;count++){
            if(count%2==1){
                sum = sum+1.0/count;
            }
            else{
                sum = sum-1.0/count;
            }
        }
        printf("%.2f\n",sum);
    }
    return 0;
}

2039

Problem Description        给定三条边,请你判断一下能不能组成一个三角形。

Input           输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000;

Output        对于每个测试实例,如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。

Sample Input

2

1 2 3

2 2 2

Sample Output

NO

YES

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值