题目描述
今天是路路的生日,生日蛋糕自然是少不了。路路的朋友们一起去蛋糕店来买蛋糕,可是等一行人到了蛋糕店之后,发现那里是人山人海啊-_-。这下可把店家给急坏了,因为人数过多,需求过大,所以人们要等好长时间才能拿到自己的蛋糕。由于每位客人订的蛋糕都是不同风格的,所以制作时间也都不同。老板为了最大限度的使每位客人尽快拿到蛋糕,因此他需要安排一个制作顺序,使每位客人的平均等待时间最少(相同时间的先来先做)。这使他发愁了,于是他请你来帮忙安排一个制作顺序,使得每位客人的平均等待时间最少。
输入
输入有两行。第一行是一个整数n,表示有n种蛋糕等待制作。第二行有n个数,第i个数表示第i种蛋糕的制作时间。
输出
输出包括一行,有n个整数,每2个整数间用空格隔开,是蛋糕的制作顺序,每个数即是蛋糕的编号。
样例输入 [复制]
2
1 2
样例输出 [复制]
1 2
题解一:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int a[1001],c[1001],b[1001];
int main()
{
int n,i,j,t,m,flag=0,k=0,h,s=0;
scanf("%d",&m);
for(i=0;i<m;i++)
{scanf("%d",&a[i]);}
c[k++]=a[0];
for(i=1;i<m;i++)
{
flag=0;
for(h=0;h<k;h++)
{
if(a[i]==c[h])
{
flag=1;break;
}
}
if(flag==0)
c[k++]=a[i];
}
n=k;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(c[j+1]<c[j])
{
t=c[j];c[j]=c[j+1];c[j+1]=t;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(c[i]==a[j])
b[s++]=j+1;
}
}
printf("%d",b[0]);
for(i=1;i<m;i++)
printf(" %d",b[i]);
printf("\n");
return 0;
}
题解二:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int
a[1000],b[1000];
int
main()
{
int
n,i,j,t;
scanf
(
"%d"
,&n);
for
(i=0;i<n;i++)
{
scanf
(
"%d"
,&a[i]);b[i]=i+1;}
for
(i=0;i<n-1;i++)
{
for
(j=0;j<n-1-i;j++)
{
if
(a[j+1]<a[j])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
t=b[j];b[j]=b[j+1];b[j+1]=t;
}
}
}
printf
(
"%d"
,b[0]);
for
(i=1;i<n;i++)
{
printf
(
" %d"
,b[i]);
}
printf
(
"\n"
);
return
0;
}