题目链接:http://vjudge.net/contest/134839#overview
密码:000000
新生们不要光看题解,要弄懂为什么?
静下心了慢慢想,本题解仅供参考
国庆假期练习赛2
第一题:多组A+B
第二题:奇数和偶数的判定 并求其平方和和立方和
第三题:整数 负数 和零 个数的统计
第四题:找最小数 并与第一个数交换后输出
第五题:简单递归的应用(很多同学都在问递归,不妨下节课以这个题为基础讲下)
第六题:数组的简单应用与数据统计
第七题:简单的数据查找并按一定格式输出
第八题:三角形的判断
第一题:HDU1090
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);//输入t,代表有t组数据
while(t--)
{
int a,b;
scanf("%d%d",&a,&b);//输入两个整数a和b
printf("%d\n",a+b);//输出a和b的和
}
return 0;
}
第二题:HDU2007
#include<stdio.h>
int main()
{
int n,m;//n,m代表这个区间的始末位置,另外坑点在n,m的大小不确定
while(~scanf("%d%d",&n,&m))
{
if(n>m)//如果n比m大,要交换下,因为下面需要用到for循环
{
int temp=n;
n=m;
m=temp;
}
int x=0,y=0;//x代表偶数的平方和,y代表奇数的立方和
for(int i=n;i<=m;i++)//在for循环里定义变量在C语言中不允许,希望以后注意把文件的后缀从.c改为.cpp 提交代码时选择G++或者C++
{
if(i%2==0)//如果i是偶数
{
x+=i*i;
}
else//如果i是奇数
{
y+=i*i*i;
}
}
printf("%d %d\n",x,y);//把最终的结果按格式输出
}
return 0;
}
第三题:HDU2008
#include<stdio.h>
int main()
{
int n;//给定一个n,代表接下来要输入n个数
while(~scanf("%d",&n))
{
if(n==0)//如果n==0 输入结束
{
break;
}
int sum1=0,sum2=0,sum3=0;//sum1代表正数的个数,sum2代表0的个数,sum3代表负数的个数
for(int i=0;i<n;i++)//在for循环里定义变量在C语言中不允许,希望以后注意把文件的后缀从.c改为.cpp 提交代码时选择G++或者C++
{
double num;
scanf("%lf",&num);
if(num>0)//num为正数
{
sum1++;
}
else if(num==0)//num为0
{
sum2++;
}
else//num为负数的时候
{
sum3++;
}
}
printf("%d %d %d\n",sum3,sum2,sum1);//注意让输出的格式
}
return 0;
}
第四题:HDU 2016
#include<stdio.h>
int main()
{
int n;//n代表每组数据的个数
while(~scanf("%d",&n))
{
if(n==0)//n==0时代表输入结束
{
break;
}
int a[105],x=0,minn=10000000;//定义一个数组来存数,x代表最小的数的位置,minn代表当前最大的数,为什么初始化为那么大的数,可以仔细思考下,这是技巧
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]<minn)//更新最小数并记录最小数的位置
{
minn=a[i];
x=i;
}
}
int temp=a[x];//交换最小数和第一个数
a[x]=a[0];
a[0]=temp;
printf("%d",a[0]);//这是输出的格式,同样是技巧,需要掌握。
for(int i=1;i<n;i++)
{
printf(" %d",a[i]);
}
printf("\n");
}
return 0;
}
第五题:HDU 2018
第一种解法:
#include <stdio.h>
int main()
{
int n, i;
int f[55] = {1, 2, 3, 4, 6};//遇到这样的题,你可以手动找下规律,然后本题的规律也是可以经过严格证明得到的,在此就不证明了。
for (i = 5 ; i < 55 ; i++)//你会发现以下规律,提前打好表,然后后面直接输出就好了
f[i] = f[i - 1] + f[i - 3];
while(~scanf("%d", &n))
{
if(n==0)//n==0的时候代表输入结束
{
break;
}
printf("%d\n", f[n - 1]);//为什么是n-1呢?因为数组是从0开始存的。
}
return 0;
}
第二种解法:
#include<stdio.h>
int f(int n)//递归的实现方法,自己可以试着模拟以下过程。看不懂不要紧,以后慢慢就懂了
{
if(n==1)
return 1;
else if(n==2)
return 2;
else if(n==3)
return 3;
else return f(n-1)+f(n-3);//这个也是通过找规律找出来的。
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if (n==0) break;
printf("%d\n",f(n));
}
return 0;
}
第六题:HDU 2023
#include<stdio.h>
#include<string.h>//memset函数在此函数库中
int main()
{
double a[105][105];//两个维度,第一个代表第几个学生。第一个维度代表第几门课,a[i][j]代表第i名学生的第j门课的成绩
double b[105],c[105];//b[i]代表第i个学生的这m门课的平均成绩,c[i]代表第i门课的所有同学的平均成绩
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(b,0,sizeof(b));//对b和c两个数组进行初始化
memset(c,0,sizeof(c));
int i,j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
scanf("%lf",&a[i][j]);
b[i]=b[i]+a[i][j];
}
b[i]=b[i]/m;//求每名同学的m科的平均成绩
}
for(j=1; j<=m; j++)
{
for(i=1; i<=n; i++)
{
c[j]=c[j]+a[i][j];
}
c[j]=c[j]/n;//求某一科的所有同学的平均成绩
}
int s=0,sum=0;//sum表示表示该班级中各科成绩均大于等于平均成绩的学生数量
for(i=1; i<=n; i++)
{
s=0;//记录第i个学生m门课中有几门达到了该课的平均成绩
for(j=1; j<=m; j++)
{
if(a[i][j]>=c[j])
{
s++;
}
}
if(s==m)//如果这m门课都达到了平均成绩
{
sum++;
}
}
printf("%.2lf",b[1]);
for(i=2; i<=n; i++)
{
printf(" %.2lf",b[i]);
}
printf("\n");
printf("%.2lf",c[1]);
for(i=2; i<=m; i++)
{
printf(" %.2lf",c[i]);
}
printf("\n");
printf("%d\n\n",sum);
}
return 0;
}
第七题:HDU 2025
#include<stdio.h>
#include<string.h>//计算字符串长度需要用到的头文件
int main()
{
char a[105];
while(~scanf("%s",a))//输入一个字符串
{
int l;
char c=a[0];//先认为第一个元素是最大的,后面会更新
l=strlen(a);//计算字符串的长度
for(int i=0;i<l;i++)
{
if(c<a[i])//更新最大元素。用c存
{
c=a[i];
}
}
for(int i=0;i<l;i++)
{
if(c==a[i])//如果某个元素是最大元素的输出格式
{
printf("%c(max)",a[i]);
}
else printf("%c",a[i]);
}
printf("\n");
}
return 0;
}
第八题:HDU 2039
#include<stdio.h>
int main()
{
int t;//共有t组数据
double a,b,c;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf",&a,&b,&c);//每个三角形的三条边的长度
if(a+b>c&&a+c>b&&b+c>a)//判断三角形的条件
{
printf("YES\n");
}
else printf("NO\n");
}
return 0;
}