这是一个大水题,但是英语捉急就跪了……
题目意思是:给你几组原始基因(w,h),基因可以杂交也可以自交产生新基因(
新的一代)。新基因可以变异(w+/-1 or/and h+/-1),也可以不变。让你输出能产生w==h的最小世代数。
思路:先判断原始基因有没有w == h的,如果有则输出0;
如果存在wi == hj ( i != j ),那么输出1(需要一次杂交把这两个基因进行结合);
其他情况,找出所有基因中w和h的差的绝对值最小的 mini,则需要的世代数就是(mini+1)/2 (向上取整)。
#include <iostream> #include<stdio.h> #include<stdlib.h> #define INF 100000000 using namespace std; int w[INF],h[INF]; int main() { int n; int cas = 1; while(scanf("%d",&n)!=EOF) { for(int i = 0;i < n;i++) { scanf("%d %d",&w[i],&h[i]); } int mini = INF; int ok; for(int i = 0;i < n;i++) for(int j = 0; j < n;j++) { int temp1 = abs(w[i] - h[i]); if(temp1 == 0) { ok = 1; mini = temp1; } int temp = abs(w[i] - h[j]); if(temp < mini) { ok = 0; mini = temp; } } if(ok && mini == 0) { printf("Case %d : %d\n",cas++,0); } else if(ok == 0 && mini == 0) { printf("Case %d : %d\n",cas++,1); } else printf("Case %d : %d\n",cas++,(mini+1)/2); } return 0; }