花了两天时间终于苦逼的做出了3n+1problem
#include<stdio.h> int main(){ int i,j,q,t,max,k,p,flag; while(scanf("%d%d",&i,&j)==2){ //表示“==2”是百度的,不知啥意思,请指教// max=0; flag=1; if(i>j) {q=i;i=j;j=q;flag=0;} //当i>j时,i,j值交换// for(k=i;k<=j;k++){ t=1; p=k; while(p!=1){ if(p%2!=0) p=3*p+1; else p/=2; t++; //累计周期长度// } if(max<t) max=t; //求出i到j范围内某个数的最大周期长度 // } if(flag) printf("%d %d %d\n",i,j,max); else printf("%d %d %d\n",j,i,max); } return 0; }
真心没有c编程的天赋啊,难度排名中最简单的题3n+1花了两天时间什么百度有道什么runtime error 什么wrong answer什么Time limit exceeded各种各样的结果都出来了,经历了一番磨难才看到久违的AC。这样下去真心达不到老师的寒假作出50题编程题的要求啊T_T,好吧,不说了,晒代码!
原题链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=36
这道题的大致意思是给出两个数,求出这两个数之间(包括这两个数)的数的最大周期长度,所谓周期长度是指如果该数为奇数,则令它乘三加一,如果为偶数,则令它除以二,并以此循环,直到算到一停止,此时周期长度就是该数经过一系列奇偶运算得到的数的总个数。