/*====================================================
细菌实验分组
总时间限制: 1000ms 内存限制: 65536kB
描述
有一种细菌分为A、B两个亚种,它们的外在特征几乎完全相同,仅仅在繁殖能力上有显著差别,A亚种繁殖能力非常强,B亚种的繁殖能力很弱。在一次为时一个 小时的细菌繁殖实验中,实验员由于疏忽把细菌培养皿搞乱了,请你编写一个程序,根据实验结果,把两个亚种的培养皿重新分成两组。
输入
输入有多行,第一行为整数n(n≤100),表示有n个培养皿。
其余n行,每行有三个整数,分别代表培养皿编号,试验前细菌数量,试验后细菌数量。
输出
输出有多行:
第一行输出A亚种培养皿的数量,其后每行输出A亚种培养皿的编号,按繁殖率升序排列。
然后一行输出B亚种培养皿的数量,其后每行输出B亚种培养皿的编号,也按繁殖率升序排列。
样例输入
5
1 10 3456
2 10 5644
3 10 4566
4 20 234
5 20 232
样例输出
3
1
3
2
2
5
4
提示
亚种内部,细菌繁殖能力差异远远小于亚种之间细菌繁殖能力的差异。
也就是说,亚种间任何两组细菌的繁殖率之差都比亚种内部两组细菌的繁殖率之差大。
解析:所谓繁殖率:是指种群中每一个体平均产生下一代的个体数。
有时也用一个个体在单位时间内产生的个体数来表示。
按照这个思路,繁殖率是用后来的数量z与原来的数量y之差除以原来的数量y,表示为(z-y)/y。
按照这个思路设计的程序,对输入输出案例都没对,但竟然AC了,无语中……
======================================================*/
#include<stdio.h> struct PeiYangMin { int No; double fanZhiLv; }; void BubbleSort(struct PeiYangMin a[],int n);//对数组a[]的前n个元素按繁殖率进行非递减排序 int main() { int n,i; struct PeiYangMin a[105]; int x,y,z; int max=0; int maxI=0; double t; freopen("6.in","r",stdin); //freopen("6.out","w",stdout); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d%d",&x,&y,&z); a[i].No=x; a[i].fanZhiLv=(z-y)/y; //a[i].fanZhiLv=z-y; } BubbleSort(a,n); for(i=n-1;i>0;i--) { t=a[i].fanZhiLv-a[i-1].fanZhiLv; if(t>max) { max=t; maxI=i; } } printf("%d ",n-maxI);//输出A组的个数 for(i=maxI;i<n;i++) { printf("%d ",a[i].No); } printf("%d ",maxI);//输出B组的个数 for(i=0;i<maxI;i++) { printf("%d ",a[i].No); } return 0; } void BubbleSort(struct PeiYangMin a[],int n) {//对数组a[]的前n个元素进行非递减排序 int i,j; struct PeiYangMin temp; for(i=1;i<n;i++) { for(j=0;j<n-i;j++) { if(a[j].fanZhiLv>a[j+1].fanZhiLv) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } }