视频:bandicam 2020-11-26.mp4
Problem G: 零起点学算法83——数组中删数
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 34533 Solved: 10815
Description
在给定的数组中删除一个数
Input
多组测试,每组第一行输入1个整数n(n<20),然后是n个整数 第二行输入1个整数m
Output
删除在第一行的n个整数中第一次出现数字m并删除,然后按照顺序输出剩下的数, 最后一个数后面无空格
Sample Input
4 1 2 3 4
3
Sample Output
1 2 4
HINT
m有可能在原数组中找不到,找不到则输出原数组
#include <stdio.h>
int main()
{
int n,i,k,a[20],m;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++) scanf("%d",&a[i]);
scanf("%d",&m);
//查找过程
for(i=0;i<n;i++)
{
if(a[i]==m)
break;
}
//如果查找到相同的,则下标即为重复值的下标
//遍历输出
for(k=0;k<n;k++) //这里用k保证i的值不被改变
{
if(k==i)
{
}
else
{
if(i==n-1&&k==n-2){printf("%d",a[k]);break;}
if(k==n-1) printf("%d",a[k]);
else printf("%d ",a[k]);
}
//最后一个数后面无空格,我这里写复杂了,可以用一个新数组替换
}
printf("\n");
}
return 0;
}
小能:
当重复的数是数组最后一个数的时候,当k下标是最后一个数的前一个数,输出 不包含空格的数,然后退出循环
小能:
if(i==n-1&&k==n-2){printf("%d",a[k]);break;}
小能:
if(k==n-1) printf("%d",a[k]);
else printf("%d ",a[k]); 当重复的数不是最后一个数的时候,执行如下的
小能:
这个你应该看得懂
Problem I: 零起点学算法86——Fibonacc
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 12801 Solved: 6916
Description
Fibonacci数列定义为(1,1,2,3,5,8,.....),即每个元素是前两个元素的和。如果一个Fibonacci数与所有小于它的Fibonacci数互质,那么称之为Fibonacci质数。 现在要求你输出前n个Fibonacci数 The Fibonacci Numbers {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ...} are defined by the recurrence: F(0)=0 F(1)=1 F(i)=F(i-1)+F(i-2) Write a program to calculate the Fibonacci Numbers.
Input
The first line of the input file contains a single integer T, the number of test cases. The following T lines,each contains an integer n ( 0 <= n <= 45 ), and you are expected to calculate Fn.
Output
Output Fn on a separate line.
Sample Input
5
0
3
5
9
20
Sample Output
0
2
5
34
6765
#include <stdio.h>
int main()
{
int n,i,k,a[46] = {0,1,1};
for(i = 3;i<=45;i++)
{
a[i] = a[i-1] + a[i-2];
}
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&k);
printf("%d\n",a[k]);
}
return 0;
}
Problem K: 零起点学算法88——青年歌手大奖赛_评委会打分
Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
Input
输入数据有多组,每组占一行,每行的第一个数是n(2 < n <= 100),表示评委的人数,然后是n个评委的打分。
Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。
Sample Input
3 99 98 97
4 100 99 98 97
Sample Output
98.00
98.50
#include<stdio.h>
int main(void)
{
float ave=0,sum=0;
int a[100],n,i,m,max=0,min=0;
while(scanf("%d",&n)!=EOF)
{
sum =0;
max =0; //因为没有归零化导致的问题
min =0;
for(i = 0;i<n;i++)
{
scanf("%d",&a[i]);
sum += a[i];
}
for(i = 1;i<n;i++)
{
if(a[max]<a[i])
max = i;
if(a[min]>a[i])
min = i;
}
sum = sum - a[max] - a[min];
ave = (float)sum / (n-2);
printf("%.2f\n",ave);
}
return 0;
}
其他答案
#include<stdio.h>
int main()
{
int n,i,qu,max,min;
float ave,s,a[200]={0};
while(scanf("%d",&qu)!=EOF)
{
s=0;
for(i=1;i<=qu;i++)
{
scanf("%f",&a[i]);
s=s+a[i];
}
max=1;
min=1;
for(i=2;i<=qu;i++)
{
if(a[i]>a[max])
{
max=i;
}
if(a[i]<a[min])
{
min=i;
}
}
s=s-a[max]-a[min];
ave=s/(qu-2);
printf("%.2f\n",ave);
}
return 0;
}
#include<stdio.h>
int main(void)
{
int a[100],n,i;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int max,min;
max=a[0];
min=a[0];
for(i=0;i<n;i++)
{
if(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
}
int s=0;
for(i=0;i<n;i++)
{
s+=a[i];
}
printf("%.2f",(s-max-min)*1.0/(n-2));
printf("\n");
}
return 0;
}
Problem J: 零起点学算法87——打印所有低于平均分的分数
Description
输入n个成绩,打印出所有低于平均分的分数(注意:ave = s/n中s 为float或ave = (float)s/n)。
Input
多个测试数据每个测试数据一行,在这行中先输入分数的个数n(1<=n<=100),然后紧跟着输入n个整数(代表分数)
Output
对于每个测试数据,输出一行按照输入顺序输出所有低于(<)平均分的分数,中间用一个空格隔开,如果没有低于平均分的那么只输出一个空行
Sample Input
3 40 50 60
2 90 80
5 10 10 90 80 80
Sample Output
40
80
10 10
#include <stdio.h>
int main()
{
float avg=0;
int a[100],b[100],n,i,sum=0;
while(scanf("%d",&n)!=EOF)
{
sum = 0;
for(i = 0;i<n;i++)
{
scanf("%d",&a[i]);
sum += a[i];
}
avg = (float)sum / n;
int k = 0,b[100];
for(i = 0;i<n;i++)
{
if(a[i]<avg)
{
b[k] = a[i];
k++;
}
}
if(k==0)
printf("\n");
else
for(int i = 0;i<k;i++)
{
if(i!=k-1)
printf("%d ",b[i]);
else
printf("%d\n",b[i]);
}
}
}
Problem L: 过桥问题
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 5054 Solved: 1103
Description
在漆黑的夜里,n位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,他们一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,每人所需要的时间分别是a1、a2、...an分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这些人尽快过桥。
Input
多组测试,输入分2行第一行是一个整数n(1<=n<=1000) 第二行是n个整数,分别表示这n个人单独过桥需要的时间
Output
输出一行,他们过桥需要的总时间
Sample Input
5
1 3 6 8 12
Sample Output
29
#include<stdio.h>
int main()
{
int i,j,a[100],b,c,n;
while(scanf("%d",&n)!=EOF)
{
for(i =0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
b=a[i];
a[i]=a[j];
a[j]=b;
}
}
}
int s =0;
if(n%2==0)
{
for(i=1;i<n;i=i+2)
{
s=s+a[i];
}
printf("%d\n",s+(n-2)*a[1]+(n-2)*a[0]/2);
}
else
{
for(i=0;i<n;i=i+2)
{
s=s+a[i];
}
printf("%d\n",s+(n-3)*a[1]+a[0]*(n-3)/2+a[1]);
}
}
return 0;
}
大神