C语言题目 Copying Books

来源:百度知道 编辑:UC知道 时间:2024/07/02 16:02:16
Before the invention of book-printing, it was very hard to make a copy of a book. All the contents had to be re-written by hand by so called scribers. The scriber had been given a book and after several months he finished its copy. One of the most famous scribers lived in the 15th century and his name was Xaverius Endricus Remius Ontius Xendrianus (Xerox). Anyway, the work was very annoying and boring. And the only way to speed it up was to hire more scribers.
Once upon a time, there was a theater ensemble that wanted to play famous Antique Tragedies. The scripts of these plays were divided into many books and actors needed more copies of them, of course. So they hired many scribers to make copies of these books. Imagine you have m books (numbered 1, 2 ... m) that may have different number of pages (p1, p2 ... pm) and you want to make one copy of each of them. Your task is to divide these books among k scribes, k <= m. Each book can be assigned to a single scriber only, and ev

#include<stdio.h>
#include<stdlib.h>

void main()
{
int N,m,k,kk;
int i,j;
long int *p;
double sum,mean;

printf("input N\n");
scanf("%d",&N);
for (j=1;j<=N;j++)
{
printf("input m k:\n");
scanf("%d %d",&m,&k);
p = (int *) malloc(sizeof(long int) * m);
printf("input p[i]\n");
for (i=0;i<m;i++) scanf("%d",&p[i]);
sum = 0.0;
for (i=0;i<m;i++) sum = sum + p[i];
mean = sum / (double) k;

kk = 1;
printf ("%d ",p[0]);
if (p[0] >= mean){ printf("/ ");kk++;sum=0.0;} else sum=p[0];

for (i=1;i<m;i++) {
sum = sum + p[i];

if (sum > mean && kk < k){
sum = p[i]; printf("/ %d ",p[i]);kk++;
} else {printf("%d ",p[i]);};

};
printf("\n");
free(p);
};
}