江苏省二级C语言上机考试常见算法(当年就是凭它拿了个优秀).docxVIP

  • 2
  • 0
  • 约1.18万字
  • 约 22页
  • 2020-12-10 发布于天津
  • 举报

江苏省二级C语言上机考试常见算法(当年就是凭它拿了个优秀).docx

PAGE PAGE # / 23 穷举法 ★ 最大公约数和最小公倍数 用穷举法求最大公约数 iloop 的思路: 1、穷举的范围是 1 到两个整数中的最小数 ; 2、可能的解是两个数分别除以 iloop 时都能整除,余数为 0 的那个 iloop. 而最小公倍数等于两个数的积除以最大公约数。 #includestdio.h int max(int first,int second); int min(int first,int second); void main(){int n1=0,n2=0,imax=0,imin=0; printf(please input two number: \n); scanf(%d%d,n1,n2); imax=max(n1,n2); imin=min(n1,n2); printf(max number is: %d\n,imax); printf(min number is: %d\n,imin);}int max(int first,int second){int itmp=0,iloop=1; if(firstsecond){itmp=first; first=second; second=itmp;}while(iloop=first){if(((first%iloop)==0)((second%iloop)==0)) itmp=iloop; iloop=iloop+1;}return itmp;}int min(int first,int second){int itmp=0; itmp=first*second/max(first,second); return itmp;} ★ 数字分解算法 试想想十进制数 123,要怎样才能分解出 1、 2 和 3 呢? 个位 3当然是: 123%10=3;十位 2有点难度,不过想想就出来啦: 12%10=2 嘛,那 12怎么来呢?123/10就等于 12了嘛~~~至于 1,用 123除以 100就出来 啦~程序如下: #includestdio.h void main(){int no=0,itmp=0; scanf(%d,no); while(no0){itmp=no%10; printf(%d\n,itmp); no=no/10;}} ★ 水仙花数 所谓水仙花数,是指一个 3 位的十进制数,该数各位数字的立方和等于该 数本身。例如 153 是一个水仙花数,因为 13+53+33= 153.100 到 1000 里当然还有几个水仙数,我们就交给电脑算吧 ~ #includestdio.h void main(){int ge=0,shi=0,bai=0,itmp=0,ino=0; for(ino=100;ino1000;ino++){ge=ino%10; shi=(ino/10)%10; bai=(ino/100)%10; itmp=ge*ge*ge+shi*shi*shi+bai*bai*bai; if(itmp==ino) printf(no is: %d\n,ino);}} 排序法 ( 1)“冒泡法” 冒泡法大家都较熟悉。其原理为从 a[0]开始,依次将其和后面的元素比较, 若a[O]a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完 成排序。下面列出其代码: void bubble(int *a,int n) /* 定义两个参数: 数组首地址与数组大小 */{int i,j,temp; for(i=0;in-1;i++) for(j=i+1;jn;j++) /* 注意循环的上下限 */ if(a[i]a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp;}} 冒泡法原理简单,但其缺点是交换次数多,效率低。 下面介绍一种源自冒泡法但更有效率的方法 “选择法”。 ( 2)“选择法” 选择法循环过程与冒泡法一致,它还定义了记号 k=i,然后依次把a[k]同后面 元素比较,若a[k]a[j],则使k=j.最后看看k=i是否还成立,不成立则交换 a [ k] , a [ i ] ,这样就比冒泡法省下许多无用的交换,提高了效率。 void choise(int *a,int n){int i,j,k,temp; for(i=0;in-1;i++) { k=i; /*给记号赋值 */ for(j=i+1;jn;j++) if(a[k]a[j]) k=j; /* 是 k 总是指向最小元素 */ if(i!=k) { /*当k!=i是才交换,否则a[i]即为最小*/ temp=a[i]; a[i]=a[k]; a[k]=temp;}}}选择法比冒泡法效率更高,但说到高效

文档评论(0)

1亿VIP精品文档

相关文档