NYOJ639 找规律
判断等比的时候注意防止除数为0和不能整除的情况。
#include <stdio.h> int a[11]; int main(){ int i, flag, t; while(scanf("%d", &a[1]) == 1){ for(i = 2; i != 6; ++i) scanf("%d", &a[i]); flag = 0; if(!flag){ t = a[2] - a[1]; for(i = 3; i != 6; ++i) if(a[i] - a[i - 1] != t) break; if(i == 6) flag = 1; //等差 } if(!flag){ if(a[1] == 0 || a[2] == 0) goto label; double tt = a[2] * 1.0 / a[1]; for(i = 3; i != 6; ++i) if(a[i] == 0 || a[i] / a[i - 1] != tt) break; if(i == 6) flag = 2; //等比 } label: if(!flag){ for(i = 3; i != 6; ++i) if(a[i] != a[i - 1] + a[i - 2]) break; if(i == 6) flag = 3; //斐波那契 } if(flag == 1){ t = a[2] - a[1]; for(i = 6; i != 11; ++i) a[i] = a[i - 1] + t; }else if(flag == 2){ t = a[2] / a[1]; for(i = 6; i != 11; ++i) a[i] = a[i - 1] * t; }else if(flag == 3){ for(i = 6; i != 11; ++i) a[i] = a[i - 1] + a[i - 2]; } if(flag) for(i = 6; i != 11; ++i) printf("%d ", a[i]); else printf("None"); printf("\n"); } return 0; }