【PAT_Basic日记】1005. 继续(3n+1)猜想
#include <stdio.h> #include <stdlib.h> /** 逻辑上的清晰和代码上的清晰要合二为一 (1)首先在逻辑上一定要清晰每一步需要干什么, (2)然后在代码上以逻辑的每一步为单位来实现代码 (3)思维逻辑跟不上时,用调试看看,尽量以电脑编译器的思维去想代码的实现 */ int my_process(int n) { if(n%2 == 0) { n=n/2; } else { n=(3*n+1)/2; } return n; } int main() { int k; int a[100]={0}; int *p=a; int i,j,t; int n; //input scanf("%d",&k); for(i=0;i<k;i++) { scanf("%d",&a[i]); } //process for(i=0;i<k;i++) { n=a[i]; while(n != 1) { n=my_process(n); for(j=0;j<k;j++) { if(p[j]==n) { p[j]=1; break; //break是因为测试例子中没有相同数字 } } } } //sort for(i=0;i<k;i++) for(j=0;j<k-i;j++) { if(a[j+1]>a[j]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } //output printf("%d",a[0]); for(i=1;i<k;i++) { if(a[i]!=1)printf(" %d",a[i]); } printf("\n"); return 0; }