解题记录:8.4

母牛的故事

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 130632 Accepted Submission(s): 64001

Problem Description
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

Sample Input
2
4
5
0

Sample Output
2
4
6

#include<iostream>
#include<cmath>
using namespace std;
int def(int x){
	if(x<5){
		return x;
	}else{
		return def(x-1)+def(x-3);
	}
}
int main(){
	int n;
	while(cin>>n&&n!=0){
		cout<<def(n)<<endl;
	}
	return 0;
}

总结:
找规律,递归,没有爆掉,庆幸。

求平均成绩

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 192769 Accepted Submission(s): 42640

Problem Description

假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。

Input

输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。

Output

对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。

Sample Input

2 2
5 10
10 20

Sample Output

7.50 15.00
7.50 15.00
1

#include<stdio.h>
#define N 50
#define M 5
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
          int i,j;
          double x[6]={0},t[51]={0};
          double a[51][6];
          for(i=0;i<n;i++)
          {
               for(j=0;j<m;j++)
               {
                  scanf("%lf",&a[i][j]);
               }
          }
          for(i=0;i<n;i++)
          {
              for(j=0;j<m;j++)
              {
                  t[i]+=a[i][j];
              }
              t[i]/=(double)m;
          }
          for(j=0;j<m;j++)
          {
              for(i=0;i<n;i++)
              {
                   x[j]+=a[i][j];
              }
              x[j]/=(double)n;
          }
          int sum=0;
          for(i=0;i<n;i++)
          {
              int count=0;
              for(j=0;j<m;j++)
              {
                  if(a[i][j]>=x[j])
                  {
                     count++;
                  }
              }
              if(count==m)
              {
                  sum++;
              }
          }
          for(i=0;i<n;i++)
          {
              printf(i==n-1?"%.2lf\n":"%.2lf ",t[i]);
          }
          for(j=0;j<m;j++)
          {
              printf(j==m-1?"%.2lf\n":"%.2lf ",x[j]);
          }
          printf("%d\n\n",sum);
 
    }
    return 0;
}

总结:

这道题之前做过,注意格式有点坑。

平方和与立方和

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 246208 Accepted Submission(s): 78052

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

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

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

Sample Input
1 3
2 5

Sample Output
4 28
20 152

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	long long int m,n,a,b;
	while(cin>>m>>n){
		a=0,b=0;
		if(m>n){
			int t=m;
			m=n;
			n=t;
		}
		for(int i=m;i<=n;i++){
			if(i%2==0){
				a+=pow(i,2);
			}else{
				b+=pow(i,3);
			}
		}
		cout<<a<<" "<<b<<endl;
	}
	return 0;
}

小明A+B

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

Problem Description
小明今年3岁了, 现在他已经能够认识100以内的非负整数, 并且能够进行100以内的非负整数的加法计算.
对于大于等于100的整数, 小明仅保留该数的最后两位进行计算, 如果计算结果大于等于100, 那么小明也仅保留计算结果的最后两位.

例如, 对于小明来说:

  1. 1234和34是相等的
  2. 35+80=15

给定非负整数A和B, 你的任务是代表小明计算出A+B的值.

Input
输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两个非负整数A和B(A和B均在int型可表示的范围内).

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

Sample Input
2
35 80
15 1152

Sample Output
15
67

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	int t,a,b;
	cin>>t;
	while(t--){
		cin>>a>>b;
		cout<<(a%100+b%100)%100<<endl;
	}
	return 0;
}

第几天?

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 225543 Accepted Submission(s): 78665

Problem Description
给定一个日期,输出这个日期是该年的第几天。

Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。

Sample Input
1985/1/20
2006/3/12

Sample Output
20
71

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
	int y,m,d,sum=0;
	int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
	while(scanf("%d/%d/%d",&y,&m,&d)!=EOF){
		sum=0;
		if((y%400==0)||((y%4==0)&&(y%100!=0))){
			for(int i=0;i<m-1;i++){
				sum+=b[i];
			}
				sum+=d;
				cout<<sum<<endl;			
		}else{
		for(int i=0;i<m-1;i++){
			sum+=a[i];
		}
			sum+=d;
			cout<<sum<<endl;
		
		}
	}
	return 0;
}

C语言合法标识符

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 111001 Accepted Submission(s): 41925

Problem Description
输入一个字符串,判断其是否是C的合法标识符。

Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。

Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。

Sample Input
3
12ajf
fi8x_a
ff ai_2

Sample Output
no
yes
no

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	int i,c;
	char a[51];
	cin>>i;
	getchar();
	while(i--){
		c=0;
		gets(a);
		if(a[0]>='0'&&a[0]<='9')
			cout<<"no"<<endl;
		else {
		for(int k=0;k<strlen(a);k++){
			if((a[k]>='0'&&a[k]<='9')||
			(a[k]>='a'&&a[k]<='z')||
			(a[k]>='A'&&a[k]<='Z')||
			(a[k]=='_'))
			c++;
		}
		if(c==strlen(a))
		cout<<"yes"<<endl;
		else
		cout<<"no"<<endl;
	}
	} 
	return 0;
} 

求绝对值

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 193171 Accepted Submission(s): 94078

Problem Description
求实数的绝对值。

Input
输入数据有多组,每组占一行,每行包含一个实数。

Output
对于每组输入数据,输出它的绝对值,要求每组数据输出一行,结果保留两位小数。

Sample Input
123
-234.00

Sample Output
123.00
234.00

#include<iostream>
#include<cmath>
using namespace std;
int main(){
	double a;
	while(cin>>a){
		if(a<0){
			a=-a;
		}
		printf("%.2lf\n",a);
	}
	return 0;
}
上一篇:Where Did the Other Dollar Go, Jeff?


下一篇:CF1146 Forethought Future Cup Elimination Round Tutorial