2014題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2014
題目分析:本題意思是去掉一個(gè)最大和一個(gè)最小值狱杰,然后計(jì)算剩余數(shù)平均值瘦材。輸入數(shù)據(jù)要求是2<n<=100,n表示評(píng)委的人數(shù)仿畸。輸出的數(shù)據(jù)保留2位小數(shù)食棕。
錯(cuò)誤代碼:
#include<stdio.h>
int main()
{
int n,i;
double a[100],max,min,sum;
while(scanf("%d",&n)!=EOF)
{
? if(n>=2&&n<=100)
? {
? for(i=0;i<n;i++) scanf("%lf",&a[i]);
? max=min=a[0];sum=0.0;
? for(i=0;i<n;i++)
? {
? ? if(a[i]>max) max=a[i];
? ? if(a[i]<min) min=a[i];
? }
? for(i=1;i<n-1;i++) sum+=a[i];
? printf("%.2lf\n",sum/(n-2));
? }
}
return 0;
}
第一次~n次提交:Wrong Answer朗和。原因是我在第二個(gè)for語(yǔ)句這里用了max和min,然后將最大值和最小值分別賦值給它們簿晓,但是我最初沒(méi)發(fā)現(xiàn)這僅僅只是賦值眶拉,不是將數(shù)組進(jìn)行排序,然后經(jīng)過(guò)修改之后得到正確的代碼憔儿。
正確代碼如下:
#include<stdio.h>
int main()
{
int n,i;
double a[100],sum,t;
while(scanf("%d",&n)!=EOF)
{
? if(n>=2&&n<=100)
? {
? for(i=0;i<n;i++) scanf("%lf",&a[i]);
? sum=0.0;
? for(i=0;i<n;i++)
? {
? ? if(a[i]>a[0])
? ? {
? ? t=a[0];
? ? a[0]=a[i];
? ? a[i]=t;
? ? }
? ? if(a[i]<a[n-1])
? ? {
? ? t=a[n-1];
? ? a[n-1]=a[i];
? ? a[i]=t;
? ? }
? }
? for(i=1;i<n-1;i++) sum+=a[i];
? printf("%.2lf\n",sum/(n-2));
}
}
return 0;
}
這代碼就是先輸入一個(gè)評(píng)委人數(shù)n忆植,并判斷n是否在2<n<=100。然后用for語(yǔ)句對(duì)數(shù)組賦值谒臼。然后對(duì)數(shù)組由大到小進(jìn)行排序朝刊,之后對(duì)第2到第n-1個(gè)數(shù)進(jìn)行求平均值。
2015題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2015
思路:在長(zhǎng)度為n(n<=100)的從2開(kāi)始的遞增有序偶數(shù)數(shù)列屋休,進(jìn)行每m個(gè)數(shù)求出一個(gè)平均值坞古,如果最后不足m個(gè),則以實(shí)際數(shù)量求平均值劫樟。
首先輸入n和m痪枫。sum是求m個(gè)數(shù)總和,num會(huì)自增到m叠艳。然后兩個(gè)數(shù)進(jìn)行相除可以算出平均值奶陈。
代碼如下:
#include<stdio.h>
int main()
{
int n,m,i,sum,num;
? ?
while(scanf("%d %d",&n,&m)!=EOF)
?
{
num=0;sum=0;
? ? ?
for(i=2;i<=n*2;i+=2)
? ?
? ? {
? ? ? ?
sum+=i;//一直加到第m個(gè)數(shù),然后進(jìn)行if語(yǔ)句的判斷
? ? ? ? ?
num++;
if(num==m&&(i!=n*2))//這里i!=n*2不執(zhí)行最后一個(gè)附较,放到第二條printf執(zhí)行
? ? ?
? ? ?
{
? ? ?
printf("%d ",sum/num);
?
? ? ? num=0;//置0吃粒,然后回到前面算第二個(gè)m,以此類(lèi)推拒课。
? ? ? ? sum=0;
? ?
? ? ? }
? ?
? }
? ? ?
if(sum==0&&num==0) continue;//防止n<m的情況
?
printf("%d\n",sum/num);
? ?
return 0;
}
}
2016題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2016
#include<stdio.h>
int main()
{
int n,a[100],i,t,min,j;
while(scanf("%d",&n)!=EOF)
{
? if(n>0&&n<100)
? {
? for(i=0;i<n;i++) scanf("%d",&a[i]);
? min=a[0];j=0;
? for(i=1;i<n;i++)
? {
? ? if(min>a[i])
? ? {
? ? min=a[i];
? ? j=i;
? ? }
? }
? t=a[j];a[j]=a[0];a[0]=t;
? for(i=0;i<n;i++)
? {
? ? if(i<n-1)printf("%d ",a[i]);
? ? else printf("%d\n",a[i]);
? }
? }
}
}
2017題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2017
#include<stdio.h>
#include<string.h>
int main()
{
int n,count,i;
char s[500];
while(scanf("%d",&n)!=EOF)
{
? while(n--)
? {
? count=0;
? scanf("%s",s);
? for(i=0;i<strlen(s);i++)
? {
? ? if(s[i]>='0'&&s[i]<='9')? count++;
? }
? printf("%d\n",count);
? }
}
}
2018題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2018
#include<stdio.h>
int main()
{
int n,i,a[100]={0,1,2,3,4};
while(scanf("%d",&n)!=EOF)
{
if(n<55&&n>0)
{
for(i=5;i<=n;i++)
{
a[i]=a[i-1]+a[i-3];
}
printf("%d\n",a[n]);
}
}
}
用遞推的方法徐勃,找到前項(xiàng)和后幾項(xiàng)的關(guān)系a(n)=a(n-1)+a(n-3)。
2019題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2019
#include<stdio.h>
int main()
{
int n,x,i,j,t,a[100];
while(scanf("%d %d",&n,&x)!=EOF&&n&&x)
{
? for(i=0;i<n;i++)scanf("%d",&a[i]);
? a[n]=x;
? for(i=0;i<=n;i++)
?
? for(j=i+1;j<=n;j++)
?
? {
? ?
? ? if(a[i]>a[j])
?
? ? {
?
? ? t=a[i];a[i]=a[j];a[j]=t;
? ? }
? }
? for(i=0;i<n;i++)printf("%d ",a[i]);
? printf("%d\n",a[i]);
}
return 0;
}
將輸入的x賦值到數(shù)組的最后一個(gè)早像,然后進(jìn)行排序僻肖。
? ? 絕對(duì)值排序!
2020題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2020
題目解析:輸入n(n<=100)個(gè)整數(shù)卢鹦,按絕對(duì)值從大到小排序后輸出臀脏。
代碼如下:我的思路是調(diào)用數(shù)學(xué)函數(shù)庫(kù)里面的絕對(duì)值 fab函數(shù)? 然后運(yùn)用if語(yǔ)句判斷前后兩個(gè)數(shù)的大小進(jìn)行排序。
#include<stdio.h>
#include<math.h>
int main()
{
int n,a[105],i,j,t;
while(scanf("%d",&n)!=EOF)
{
? if(n>0&&n<=100)
? {
? for(i=0;i<n;i++) scanf("%d",&a[i]);
? for(i=0;i<n-1;i++)
? ? for(j=i+1;j<n;j++)
? ? {
? ? if(fabs(a[i])<fabs(a[j]))
? ? {
? ? ? t=a[j];
? ? ? a[j]=a[i];
? ? ? a[i]=t;}
? ? }
? ? for(i=0;i<n-1;i++)printf("%d ",a[i]);
? ? printf("%d\n",a[i]);
? }
}
return 0;
}
? ? 查找最大元素
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2025
做題思路:這題先定義一個(gè)字符數(shù)組冀自,然后進(jìn)行賦值揉稚,在第一個(gè)for循環(huán)里面對(duì)數(shù)組里面尋找最大值,將最大值賦值給t熬粗。第二個(gè)for循環(huán)里面把數(shù)組里面等于最大值的輸出并加上(max)搀玖。不等于就輸出就行了。
#include<stdio.h>
#include<string.h>
int main()
{
? ? char s[100],t;
? ? int i;
? ? while(gets(s))
? ? {
? ? ? ? t='0';
? ? ? ? for(i=0;i < strlen(s);i++)
? ? ? ? ? ? if(s[i]>t)
? ? ? ? ? ? ? ? t=s[i];//尋找最大值
? ? ? ? for(i=0;i < strlen(s);i++)
? ? ? ? ? ? if(s[i]==t)
? ? ? ? ? ? ? ? printf("%c(max)",s[i]);
? ? ? ? ? ? else
? ? ? ? ? ? ? ? printf("%c",s[i]);
? ? ? ? printf("\n");
? ? }
? ? return 0;
}
個(gè)人總結(jié):我這周的做題數(shù)為十五題驻呐,目前做到了2025題巷怜,這周的做題的感覺(jué)就是有思路葛超,知道要怎么去做這些題暴氏。不過(guò)程序總是有一點(diǎn)小瑕疵延塑。可能還是自己不夠細(xì)心答渔。下周可以再加大題量关带。把學(xué)習(xí)情況寫(xiě)的更詳細(xì)。