HOJ 1058

it2022-05-08  10

//HOJ 1058题//重点理解#include <stdio.h>int min(int a,int b,int c, int d);int i;int j;int k;int l;int main(){ int data[5843]; data[1]=1; i=j=k=l=1; for(int t=2;t<5843;t++) {  data[t]=min(2*data[i],3*data[j],5*data[k],7*data[l]); } int n; while(scanf("%d",&n)!=EOF && n!=0) {  //输出的格式要注意  if(n % 10==1 && n 0 !=11)  {   printf("The %dst humble number is %d.\n",n,data[n]);  }  else if(n % 10==2 && n0!=12)  {   printf("The %dnd humble number is %d.\n",n,data[n]);  }  else if(n % 10==3 && n0!=13)  {   printf("The %drd humble number is %d.\n",n,data[n]);  }  else   {   printf("The %dth humble number is %d.\n",n,data[n]);  } } return 0;}int min(int a,int b,int c,int d){ //此处对if的理解不对,三个if并列代表对每个if均做一次判断,而if...else if...else if...则是 //在上一条件不满足的情况下才对下一条件进行判断。 int mindata=a; if(b<mindata) mindata=b; //else if(c<mindata) mindata=c; //else if(d<mindata) mindata=d; if(c<mindata) mindata=c; if(d<mindata) mindata=d;  //特别要注意此处:必须使用if,因为可能出现多个值都等于最小值的情况,如果使用else if 漏将i,j,k,l //中的某个值递增,则下一次它将成为最小值,从而使数组中存在重复的数值。 if(mindata==a) i++; //else if(mindata==b) j++; //else if(mindata==c) k++; //else if(mindata==d) l++; if(mindata==b) j++; if(mindata==c) k++; if(mindata==d) l++; return mindata;}

转载于:https://www.cnblogs.com/north_dragon/archive/2010/03/13/1685280.html


最新回复(0)