1、算法程序集算法程序集目录第一讲 循环算法 11、质数问题 12、模糊票据问题 33、水仙花数问题 44、约数问题 55、打印星号问题 66、编程计算问题 77、车牌问题 98、排序问题 119、最大公约数公倍数问题 1410、因式分解问题 1511、随机数的 2分 查找 1612、狼找兔子问题 1813、统计字符问题 1914、 19第一讲 循环算法1、 质数问题问题描述:输出100200的所有素数(质数)。思路思路:说明除了自身之外,无法被其它整数整除的数称之为质数。程序代码:C+语言实现:Objective-C语言实现:#include stdio.h#include stdlib.h#i
2、nclude iostream.h#include math.hvoid main() int i,k; for(i=101;i=200;i+) for(k=2;ki/2;k+) if(i%k=0) break; else if(k=i/2-1) printf(%in,i); #import #include int main (int argc, const char *argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; int i,k; for(i=101;i=200;i+) for(k=2;ki/2;k+) if(i
3、%k=0) break; else if(k=i/2-1) printf(%in,i); pool drain; return 0; 运行结果:问题描述: 求在 N 之内的质数 :算法思路: 程序代码:C+语言实现Objective-C语言实现:#include #include #define N 1000 void main() int i, j; int primeN+1; for(i = 2; i = N; i+) primei = 1; for(i = 2; i*i = N; i+) / 这边可以改进 if(primei = 1) for(j = 2*i; j = N; j+) if
4、(j % i = 0) primej = 0; for(i = 2; i N; i+) if(primei = 1) printf(%4d , i); if(i % 16 = 0) printf(n); printf(n); #import #include int main (int argc, const char *argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init;int i,j;int primeN+1;for(i=2;i=N;i+) primei=1;for(i=2;i*i=N;i+) If(primei=1)
5、for(i=2*I;j=N;j+) If(j%i=0) Primej=0;for(i=2;iN;i+) if(primei=1)Printf(“%4d”,i);if(i%16=0)printf(“n”);printf(n);pool drain; return 0;运行结果 :2、模糊票据问题问题描述:现在有一张5位数票据,如1#47,因某些原因,其中有二位数已模糊不清,但知道它能被57或67整除,问所用满足这些条件的5位数,及统计满足条件的个数。解题思路:程序代码:C+语言实现:Objective-C语言实现:#include stdio.h#include stdlib.h#include
6、 iostream.h#include math.hvoid main() int i,j,k;for(i=0;i10;i+) for(j=0;j10;j+) k=10047+i*1000+j*100; if(k%57=0 | k%67=0) printf(%in,k); #import int main (int argc, const char *argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init;int i,j,k;for(i=0;i10;i+) for(j=0;j10;j+) k=10047+i*1000+j*100
7、; if(k%57=0 | k%67=0) printf(%in,k); pool drain; return 0; 运行结果:3、水仙花数问题问题描述:即存在这样的三位数,ABC;满足如下表达式: ABC=A3+B3+C3设计思路:程序代码:C+语言实现:Objective-C语言实现:#include stdio.h#include stdlib.h#include iostream.h#include math.hvoid main() int a,b,c,n; for(a=1;a10;a+) for(b=0;b10;b+) for(c=0;c10;c+) n=a*100+b*10+c;
8、 if(n=(a*a*a+b*b*b+c*c*c) coutnendl; #import int main(int argc,const char * argv) NSAutoreleasePool * pool = NSAutoreleasePool alloc init; int i,j,k,n;for(i=1;i10;i+) for(j=0;j10;j+) for(k=0;kn; for(i=1;i=n;i+) if(n%i=0) coutiendl; #import int main (int argc, const char *argv) NSAutoreleasePool *poo
9、l = NSAutoreleasePool alloc init;int n,i;scanf(%i,&n);for(i=1;in; char *p; p=(char *)malloc(sizeof(char)*(n+1); int i; for(i=0;in;i+) pi= ; pn=0; for(i=0;in;i+) pn-i-1=*; coutp; coutendl; #import int main (int argc, const char *argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; int n; sca
10、nf(%i,&n); char *p; p=(char *)malloc(sizeof(char)*(n+1); int i;for(i=0;in;i+) pi= ; pn=0; for(i=0;iinput; int *a; a=(int *)calloc(input,sizeof(int); int i,j; for(i=0;iinput;i+) for(j=0;ji+1;j+) aj=aj+2; for(j=0;j9) aj+1=aj+1+aj/10; aj=aj%10; printf(2+22+.+2 %d 2=,input); for(i=input-1;i=0;i-) printf
11、(%d,ai); #import#include #include int main(int argc, const char * argv) NSAutoreleasePool *pool = NSAutoreleasePool alloc init; int upet; scanf(%d,&upet); int *a; a=(int *)calloc(upet,sizeof(int); int i,j; for(i=0;iupet;i+) for(j=0;jupet;j+) aj=aj+2; for(j=0;j9) aj+1=aj+1+aj%10; aj=aj%10; printf(2+2
12、2+222+2222+.2.2 %d 2 =,upet); for(i=upet-1;i=0;i-) printf(%d ,&ai); pool drain; return 0; 运行结果:问题描述:求 N!的运算。(精确计算)思路描述:程序实现:C+语言Objcetive-C#include stdio.h#includeiostream.h#include stdlib.h#include Math.hvoid main()int input; cininput; int *a; a=(int *)malloc(sizeof(int); int Length=1; a0=1; int i,
13、j; for(i=1;i=input;i+) for(j=0;jLength;j+) aj=aj*i; for(j=0;j9) if(j=Length-1) Length+; a=(int *)realloc(a,(sizeof(int)*(Length); aLength-1=0; aj+1=aj+1+aj/10; aj=aj%10; printf( %d!= ,input); for(j=Length-1;j=0;j-) printf(%d,aj);#import#include #include int main(int argc, const char * argv) NSAutore
14、leasePool *pool = NSAutoreleasePool alloc init;Int upet;Printf(“请输入一个数:”);Scanf(“%d”,&upet);int *a; a=(int *)malloc(sizeof(int); int Length=1; a0=1; int i,j; for(i=1;i=upet;i+) for(j=0;jLength;j+) aj=aj*i; for(j=0;j9) if(j=Length-1) Length+; a=(int *)realloc(a,(sizeof(int)*(Length); aLength-1=0; aj+
15、1=aj+1+aj/10; aj=aj%10; printf( %d!= , upet); for(j=Length-1;j=0;j-)printf(%d,aj);pool drain; return 0;运行结果:7、车牌问题 问题描述: 若车牌是由0到9的十个数字组成的五位数,现将车牌号每位的数字进行相加求和,得到一个新数字,若新数字大于10,仍将各位数字相加求和,又得到一个新数字,如此下去,最后总能得到小于10的正整数,(例如:车牌为54235,5+4+2+3+4=19, 1+9=10 , 1+0=1)。编程实现,求取各种可能的车牌号,经过如上处理,最后得到0到9各个数字的个数,看看有什
16、么规律,为什么?结论:显然而知,0只出现了一次,其他的数字出现概率相同.问题思路:int p=a0+a1+a2+a3+a4; /5个车牌号的相加 while(p=10)/判断5个数相加是否大于10, k=p%10; j=(p-k)/10; p=j+k; 用上面的算法求车牌号每位的数字进行相加求和,得到一个新数字,若新数字大于10,仍将各位数字相加求和,又得到一个新数字,如此下去,知道5个车牌号相加小雨10 为止.程序实现:C+实现:#include stdio.h#includeiostream.h#include stdlib.h#include Math.hvoid main() int
17、a10=0; int N,i,j,k; N=10000000; for(i=0;iN;i+) j=i; /个位 k=0; /十位 while(true) k=k+j%10; j=j/10; if(j=0) if(k10) break; else j=k; k=0; ak+; for(j=0;j10;j+) cout最后得到j的概率是:aj*100.0/N%endl;运行结果:8、排序问题问题描述:对一组数的排序算法思路:各个排序法的各不相同 选择排序:将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个,例如:排序前:70 8
18、0 31 37 10 1 48 60 33 801 80 31 37 10 70 48 60 33 80 选出最小值1 一次1 10 31 37 80 70 48 60 33 80 选出最小值10 2次1 10 31 37 80 70 48 60 33 80 选出最小值31 3次. 插入排序:像是玩朴克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端的牌,然后插入前面一堆牌的适当位置,例如:排序前:92 77 67 8 6 84 55 85 43 6777 92 67 8 6 84 55 85 43 67 将77插入92前 1次67 77 92 8 6 84 55 85 43 67 将67
19、插入77前 2次8 67 77 92 6 84 55 85 43 67 将8插入67前 3次 气泡排序:顾名思义,就是排序时,最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端,所以大的元素会不断的往右移动,直到适当的位置为止。程序实现:C+语言Objective-C#include #include #include #define MAX 10 void selsort(int); / 选择排序 void insort(int); / 插入排序 void bubsort(int); / 气泡排序 #define SWAP(x,y) int t; t = x;
20、x = y; y = t; void main() int numberMAX = 0; int i; printf(排序前:); for(i = 0; i MAX; i+) numberi = rand() % 100; /随机数 printf(%d , numberi); printf(n请选择排序方式:n); printf(1)选择排序n(2)插入排序n(3)气泡排序n:); scanf(%d, &i); switch(i) case 1: selsort(number); break; case 2: insort(number); break; case 3: bubsort(num
21、ber); break; default: printf(选项错误(1.3)n); void selsort(int number) / 选择排序 int i, j, k, m; for(i = 0; i MAX-1; i+) m = i; for(j = i+1; j MAX; j+) if(numberj numberm) m = j; else if( i != m) SWAP(numberi, numberm); printf(第 %d 次排序:, i+1); for(k = 0; k MAX; k+) printf(%d , numberk); printf(n); void insort(int number) /插入排序 int i, j, k, tmp; for(j = 1; j MAX; j+) tmp = numberj; i = j - 1; while(tmp numberi) numberi+1 = numberi; i-; if(i = -1) break; numberi+1 = tmp; for(k = 0; k MAX; k+) printf(%d , numberk); printf(n); void bubsort(int number) / 气泡
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1