求助,C语言ZOJ题目~测试数据都可以过得,不知道哪里有问题,跪求大神解答~

[复制链接]
查看11 | 回复3 | 2013-1-25 12:25:13 | 显示全部楼层 |阅读模式
首先你的冒泡排序时肯定不行的, 那个效率太低了, 改用快排或可一试. C语言可以用qsort函数.另外格式控制我没仔细看, 参考代码如下:#include stdio.h#include stdlib.hstruct Trade {
int j,f;
double percent;}mouse[3001];int cmp(const void* a,const void* b){
return ((struct Trade*)a)-percent((struct Trade*)b)-percent;}int main(){
int n,m;
while(scanf(%d%d,
for(i=0;in;i++) {
scanf(%d%d,
mouse.percent=(double)mouse.jmouse.f;
}
qsort(mouse,n,sizeof(struct Trade),cmp);
double sum=0;
for(i=0;in;i++)
if(mmouse.f) {
sum += mouse.j;
m -= mouse.f;
} else {
sum += mouse.percent*m;
break;
}
printf(%.3lfn,sum);
}
return 0;}赞同0|评论
回复

使用道具 举报

千问 | 2013-1-25 12:25:13 | 显示全部楼层
排序后二分查找#includestdio.h#includestdlib.hstruct lang{char fat[20];char nor[20];}f[100006];int cmp(const void *a, const void *b){struct lang *c = (struct lang *)a;struct lang *d = (struct lang *)b;int i;int len;int lenc = strlen(c - fat);int lend = strlen(d - fat);len = lenclend ? lenc : lend;for (i=0; ilen; ++i){if (c - fat != d - fat){return c - fat - d - fat;}}}int main(void){char s[30];int i;int n;int total = 1;int len;int left;int right;int mid;int isfind;gets(s);while ((strcmp(s, ) != 0)){len = strlen(s);i = 0;while (s !=){++i;}n = i;for (i=0; in; ++i){f[total].nor = s;}f[total].nor[n] = 0;for (i=n+1; ilen; ++i){f[total].fat[i-n-1] = s;}f[total].fat[len-n] = 0;++total;gets(s);}qsort(f+1, total-1, sizeof(f[1]), cmp);while (gets(s)){left = 1;right = total - 1;mid = (left + right)2;isfind = 0;while (left = right){if (strcmp(s, f[mid].fat)0){right = mid - 1;}else if (strcmp(s, f[mid].fat)0){left = mid + 1;}else{isfind = 1;break;}mid = (left + right)2;}if (isfind == 0){printf(ehn);}else{printf(%sn, f[mid].nor);}}return 0;}赞同1|评论
回复

使用道具 举报

千问 | 2013-1-25 12:25:13 | 显示全部楼层
运行无错#include stdio.h#include stdlib.hstruct data{ float F; floatJ; float density;};typedef struct data data;int main(){data feed[1001],temp; float M,sum; int i,N,j; int n[8]={70,85,67,75,127,89,79,85}; scanf(%f%d, while(N != -1) {sum = 0;for(i = 1;i = N; i++ ){ scanf(%f%f,
if(feed.F == 0)
feed.density = 999999999;
else feed.density = feed.Jfeed.F;}
for( i = 1;i = N; i++)
{
temp = feed;
for(j = i;j = N;j ++)
if(temp.densityfeed[j].density)
{
feed = feed[j];
feed[j] = temp;
temp = feed;
}}
i = 1;
while( (M = 0)= N))
{
if( M = feed.F)
{if(feed.F == 0)
{
sum += feed.J;
i++;
}
else
{
sum += M*feed.density;
break;
}
}
else
{
sum += feed.J;
M -= feed.F;
i ++;
}
}
printf(%.3lfn,sum);
scanf(%f%d,
}for(i=0;i8;i++)printf(%c,n); return 0;}追问为什麽会有for(i=0;i8;i++)printf(%c,n);这个语句呢,作用是什麽~?另外提交之後运行并不正确呢~ 赞同1|评论
回复

使用道具 举报

千问 | 2013-1-25 12:25:13 | 显示全部楼层
#include stdio.h#include stdlib.hstruct data{float F;floatJ;float density;};typedef struct data data;int main(){
data feed[1001],temp;
float M,sum;
int i,N,j;
float sumarray[100];
int count = 0;
scanf(%f %d,
while(N != -1)
{
sum = 0;
for(i = 1;i = N; i++ )
{
scanf(%f%f,
if(feed.F == 0)
feed.density = 999999999;
else
feed.density = feed.Jfeed.F;
}
for( i = 1;i = N; i++)
{
temp = feed;
for(j = i;j = N;j ++)
if(temp.densityfeed[j].density)
{
feed = feed[j];
feed[j] = temp;
temp = feed;
}
}
i = 1;
while( (M = 0)= N))
{
if( M = feed.F)
{if(feed.F == 0)
{sum += feed.J;
i++;}
else
{sum += M*feed.density;
break;}}
else
{sum += feed.J;
M -= feed.F;
i ++;
}
}
printf(%.3lfn,sum);
sumarray[count] = sum;
count++;
scanf(%f%d,
}
for(int k = 0;kcount;k++)
{
printf(%.3lfn,sumarray[k]);
}
return 0;
}输入数字的时候两个数字之间要有空格追问输入的时候两个数字之间不是非得有空格的啊~ 回答那得看 scanf 的时候里面怎么写的, 里面用逗号输入的数据就得用逗号分隔 , 里面用空格输入的数据就要用空格分开。 赞同1|评论
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行