您当前的位置: 首页 >  算法

星许辰

暂无认证

  • 0浏览

    0关注

    466博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

杭电OJ第11页2005~2009算法题(C语言)

星许辰 发布时间:2021-01-04 15:38:17 ,浏览量:0

目录
  • 2005.第几天?
  • 2006.求奇数的乘积
  • 2007.平方和与立方和
  • 2008.数值统计
  • 2009.求数列的和

2005.第几天?
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可
以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71

分析: (1)判断该年是闰年还是平年,若是闰年则返回1,否则返回0 (2)判断输入的日期是否合法 (3)计算这个日期是该年的第几天

#include 

//判断输入的年份是否为闰年,是闰年则返回1,否则返回0 
int IsLeapYear(int year){
	//闰年的判定方法,满足下面中的一项即为闰年:
	//(1)能被4整除,但不能被100整除;
	//(2)能被400整除;
	if(year%4==0 && year%100!=0 || year%4==0){
		return 1;
	}else{
		return 0;
	}
}

//判断日期是否合法 
int IsLegal(int year,int month,int day){
	//年份必须为正整数 
	if(year0 && day=29) return 0;
		if(month==2 && IsLeapYear(year) && day>=30)  return 0;
		if(month==4 || month==6 || month==9 || month==11){
			if(day==31) return 0;
		}
		return 1;
	}else{
		return 0;
	}		
}

void WhichDay(){
	int months[12]={0,31,59,90,120,151,181,211,242,273,303,334};
	int year,month,day,c1,c2,temp;
	while(scanf("%d%c%d%c%d",&year,&c1,&month,&c2,&day)!=EOF){
		if(!IsLegal(year,month,day)){
			printf("输入的日期有误,请重新输入!\n");	
			continue; 
		}
		if(IsLeapYear(year) && month>2){
			temp=1;
		}else{
			temp=0;
		}
		printf("%d\n",temp+months[month-1]+day);
	}
}
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 

void OddMul(){
	int n,result,i,temp;
	while(scanf("%d",&n)!=EOF){
		result=1;
		for(i=0;im){
			temp=n;
			n=m;
			m=temp;
		}
		sum1=sum2=0;
		for(i=n;i            
关注
打赏
1665627467
查看更多评论
0.0390s