随着输入不断的排序,找出前w%的最低分数线
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
void sort(int a[], int n)
{
int i, j, t;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (a[j] < a[j + 1]) //从大到小排序
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
}
int max(int a, int b)
{
if (a > b) return a;
else return b;
}
int main()
{
int n, w;
int* sc; //存储成绩
int i, ps; //ps代表当前的获奖人数
scanf("%d %d", &n, &w);
sc = (int*)malloc(sizeof(int) * n);
for ( i = 0; i < n; i++)
{
scanf("%d", &sc[i]);
sort(sc, i + 1);
ps = max(1, (i + 1) * w / 100.0); //当前的获奖人数
if(i<n-1)
printf("%d ", sc[ps - 1]);
else
printf("%d", sc[ps - 1]);
}
return 0;
}
这个就是个双循环。循环输入成绩,然后进行成绩降序排序,取当前人数的百分比人数作为下标,输出该下标对应的成绩就行
#include <stdio.h>
int main()
{
int i,j,n,per,a[10000],t,k;
double m;
scanf("%d%d",&n,&per);
for(i=0;i<n;i++)
{
scanf("%d",&t);
for(j=0;j<i;j++)
{
if(a[j] <t)
{
for(k=i-1;k>=j;k--)
a[k+1] = a[k];
a[j] = t;
break;
}
}
if(j==i)
a[i] = t;
m = (i+1)*per/100.0+0.0001;
if(m>0)
m--;
printf("%d ",a[(int)m]);
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!