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 <stdio.h>
//判断输入的年份是否为闰年,是闰年则返回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(year<=0) {
return 0;
}
//月份必须为1~12的整数
if(month<=0 || month>=13){
return 0;
}
if(day>0 && day<=31) {
if(month==2 && !IsLeapYear(year) && 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 <stdio.h>
void OddMul(){
int n,result,i,temp;
while(scanf("%d",&n)!=EOF){
result=1;
for(i=0;i<n;i++){
scanf("%d",&temp);
if(temp%2!=0) result*=temp;
}
printf("%d\n",result);
}
}
2007.平方和与立方和
Problem Description
给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。
Input
输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。
Output
对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和
以及所有奇数的立方和。
你可以认为32位整数足以保存结果。
Sample Input
1 3
2 5
Sample Output
4 28
20 152
分析:要注意前后整数m、n的大小,如果前面的比后面的大,则要交换值
#include <stdio.h>
void SumOFSquareAndCubic(){
int n,m,sum1,sum2,i,temp;
while(scanf("%d%d",&n,&m)!=EOF){
if(n>m){
temp=n;
n=m;
m=temp;
}
sum1=sum2=0;
for(i=n;i<=m;i++){
if(i%2==0){
sum1+=i*i;
}else{
sum2+=i*i*i;
}
}
printf("%d %d\n",sum1,sum2);
}
}
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
分析:使用一套if语句即可解决问题
#include <stdio.h>
void NumStatistics(){
double num;
int n,count1,count2,count3;
while(scanf("%d%d",&n)!=EOF && n){
count1=count2=count3=0;
//统计数值
while(n--){
scanf("%lf",&num);
if(num<0){
count1++;
}else if(num==0){
count2++;
}else{
count3++;
}
}
printf("%d %d %d\n",count1,count2,count3);
}
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<math.h>中的sqrt()函数,用来求正平方根
#include <stdio.h>
#include <math.h>
void SumOfSeries(){
int n,m,i;
double sum,num;
while(scanf("%d%d",&n,&m)!=EOF){
sum=0;
//将n转化为double型,并且赋值给num
num=(double)n;
//求该数列的前m项和
for(i=0;i<m;i++){
sum+=num;
num=sqrt(num);
}
printf("%.2lf\n",sum);
}
}