一道C语言的基础算法题 请帮我下 困扰好久 思路遇到阻塞
于是他决定从这n个白富美中挑最白的,如果2个同样白,就选择较富的那个,如果2个是还是同样富的,就选择较美的那个.如果2个还是同样美的,那就随挑个吧!输入有多个测试数据每个...
于是他决定从这n个白富美中挑最白的,如果2个同样白,就选择较富的那个,如果2个是还是同样富的,就选择较美的那个.如果2个还是同样美的,那就随挑个吧!
输入
有多个测试数据
每个测试数据输入一个整数n(1<=n<=1000),代表有n个百富美。接下来有n行,每行3个整数 b,f,m,(1<=b<=100,1<=f<=100,1<=m<=100)代表每个白富美的'白',‘富’,'美'
输出
输出的黄爷心中'白富美'的3个参数
样例输入:
4
2 2 2
1 5 8
2 3 3
2 3 5
样例输出:
2 3 5
PS:抱歉 分数不多了 TT 展开
输入
有多个测试数据
每个测试数据输入一个整数n(1<=n<=1000),代表有n个百富美。接下来有n行,每行3个整数 b,f,m,(1<=b<=100,1<=f<=100,1<=m<=100)代表每个白富美的'白',‘富’,'美'
输出
输出的黄爷心中'白富美'的3个参数
样例输入:
4
2 2 2
1 5 8
2 3 3
2 3 5
样例输出:
2 3 5
PS:抱歉 分数不多了 TT 展开
5个回答
2013-11-28
展开全部
使用一个结构体存储,然后再进行函数排序。就可以了!必须用C吗?其实C++中有专门的排序函数,只需要调用一下就差不多了。
更多追问追答
追问
我大一 只学习了C 你可以用C的代码 告诉我代码吗 多谢了
追答
#include
#include
struct ld{
int a,b,c;
}x[1005];
int cmp(const void *p1,const void *q1)
{
struct ld *p=(struct ld *)p1;
struct ld *q=(struct ld *)q1;
if(p->a==q->a)
{
if(p->b==q->b)
return q->c-p->c;
return q->b-p->b;
}
return q->a-p->a;
}
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++)
scanf("%d%d%d",&x[i].a,&x[i].b,&x[i].c);
qsort(x,n,sizeof(x[0]),cmp);
printf("%d %d %d\n",x[0].a,x[0].b,x[0].c);
}
return 0;
}
//将a,b,c,换成b,c,m就可以了!
展开全部
一个结构表示女人 struct Women{ int white; int rish; int buterful;bool weed_out };
四个属性分别为白,富,美,是否被淘汰。
数组 Women arr[n] 表示n个女人。
3 次for循环,
每次循环,判断下一个属性,
第一次for循环,求arr[i]里面最白的,只要不是最白的,weed_out设为真,表示淘汰,如果只有一个最白,那么直接返回了。
第二次for循环,未淘汰的女人里面最富的。。。。。
第三次for循环,未淘汰的女人里面最美的。。。。。
四个属性分别为白,富,美,是否被淘汰。
数组 Women arr[n] 表示n个女人。
3 次for循环,
每次循环,判断下一个属性,
第一次for循环,求arr[i]里面最白的,只要不是最白的,weed_out设为真,表示淘汰,如果只有一个最白,那么直接返回了。
第二次for循环,未淘汰的女人里面最富的。。。。。
第三次for循环,未淘汰的女人里面最美的。。。。。
追问
表示 大一刚学C 还没有接触到结构 可以不用结构 只运用到数组 for等基本语法吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main(void)
{
int i, n, j, max;
int b[1002], f[1002], m[1002];
scanf("%d", &n);
for(i=0;i<n;i++)
scanf("%d%d%d", &b[i], &f[i], &m[i]);
max=0;
for(i=1;i<n;i++)
{
if(b[i]>b[max]||b[i]==b[max]&&f[i]>f[max]||b[i]==b[max]&&f[i]==f[max]&&m[i]>m[max])
max=i;
}
printf("%d %d %d\n", b[i], f[i], m[i]);
}
没有数据测试但编译通过
int main(void)
{
int i, n, j, max;
int b[1002], f[1002], m[1002];
scanf("%d", &n);
for(i=0;i<n;i++)
scanf("%d%d%d", &b[i], &f[i], &m[i]);
max=0;
for(i=1;i<n;i++)
{
if(b[i]>b[max]||b[i]==b[max]&&f[i]>f[max]||b[i]==b[max]&&f[i]==f[max]&&m[i]>m[max])
max=i;
}
printf("%d %d %d\n", b[i], f[i], m[i]);
}
没有数据测试但编译通过
更多追问追答
追问
你的If 里面写的东西 太难读懂了 测试也不通过
追答
就是3种情况更白,一样白更富、一样白,一样富更美
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没弄懂,再说的仔细点,再输入只个样例发上网看看
追问
恩 那再给你个样例
输入
3
100 1 1
1 10 10
20 1 1
输出
100 1 1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
诫于你是初学者,用基础语句给你写个思路,具体请自行调试
int main()
{
int n,b,f,m,i;
int bb=0,ff=0,mm=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d %d",&b,&f,&m);
if(b>bb)//如果输入的比当前的还白
{
bb = b;
ff = f;
mm = m;
}
else if(b == bb) //同样白
{
if(f>ff) //看看谁富
{
ff = f;
mm = m;
}
else if(f == ff)
{
if(m>mm) //看看谁美
mm = m;
}
}
}
printf("bb=%d ff=%d mm=%d",bb,ff,mm);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询