硬货单⽚机常⽤的14个C语⾔算法(附详细代码)
算法(Algorithm):计算机解题的基本思想⽅法和步骤。
算法的描述:是对要解决⼀个问题或要完成⼀项任务所采取的⽅法和步骤的描述,包括需要什么数据(输⼊什么数据、输出什么结果)、采⽤什么结构、使⽤什么语句以及如何安排这些语句等。通常使⽤⾃然语⾔、结构化流程图、伪代码等来描述算法。
⼀、计数、求和、求阶乘等简单算法
此类问题都要使⽤循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意⽤来表⽰计数、和、阶乘的变量的初值。
例:⽤随机函数产⽣100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
本题使⽤数组来处理,⽤数组a[100]存放产⽣的确100个随机整数,数组x[10]来存放个位上的数字分别为
1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x[1]中,个位是2的个数存放在x[2]中,……个位是0的个数存放在x[10]。
void main()
{
int a[101],x[11],i,p;
for(i=0;i<=11;i++)
x=0;
for(i=1;i<=100;i++)
{
a=rand() % 100;
printf("%4d",a);
if(i%10==0)printf("\n");
}
for(i=1;i<=100;i++)
{
p="a"%10;
if(p==0) p="10";
x[p]=x[p]+1;
}c++判断素数
for(i=1;i<=10;i++)
{
p="i";
if(i==10) p="0";
printf("%d,%d\n",p,x);
}
printf("\n");
}
⼆、求两个整数的最⼤公约数、最⼩公倍数
分析:求最⼤公约数的算法思想:(最⼩公倍数=两个整数之积/最⼤公约数)
(1) 对于已知两数m,n,使得m>n;
(2) m除以n得余数r;
(3) 若r=0,则n为求得的最⼤公约数,算法结束;否则执⾏(4);
(4) m←n,n←r,再重复执⾏(2)。
例如: 求 m="14" ,n=6 的最⼤公约数.
m n r
14 6 2
6 2 0
void main()
{ int nm,r,n,m,t;
printf("please input two numbers:\n");
scanf("%d,%d",&m,&n);
nm=n*m;
if (m
{ t="n"; n="m"; m="t"; }
r=m%n;
while (r!=0)
{ m="n"; n="r"; r="m"%n; }
printf("最⼤公约数:%d\n",n);
printf("最⼩公倍数:%d\n",nm/n);
}
三、判断素数
只能被1或本⾝整除的数称为素数 基本思想:把m作为被除数,将2—INT( )作为除数,如果都除不尽,m就是素数,否则就不是。(可⽤以下程序段实现)
void main()
{ int m,i,k;
printf("please input a number:\n");
scanf("%d",&m);
k=sqrt(m);
for(i=2;i
if(m%i==0) break;
if(i>=k)
printf("该数是素数");
else
printf("该数不是素数");
}
将其写成⼀函数,若为素数返回1,不是则返回0
int prime( m%)
{int i,k;
k=sqrt(m);
for(i=2;i
if(m%i==0) return 0;
return 1;
}
四、验证哥德巴赫猜想
(任意⼀个⼤于等于6的偶数都可以分解为两个素数之和)
基本思想:n为⼤于等于6的任⼀偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为⼀组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验n1、n2是否素数,… 直到n1=n/2为⽌。
利⽤上⾯的prime函数,验证哥德巴赫猜想的程序代码如下:
#include "math.h"
int prime(int m)
{ int i,k;
k=sqrt(m);
for(i=2;i
if(m%i==0) break;
if(i>=k)
return 1;
else
return 0;
}
main()
{ int x,i;
printf("please input a even number(>=6):\n");
scanf("%d",&x);
if (x<6||x%2!=0)
printf("data error!\n");
else
for(i=2;i<=x/2;i++)
if (prime(i)&&prime(x-i))
{
printf("%d+%d\n",i,x-i);
printf("验证成功!");
break;
}
}
五、排序问题
1.选择法排序(升序)
基本思想:
1)对有n个数的序列(存放在数组a(n)中),从中选出最⼩的数,与第1个数交换位置;2)除第1 个数外,其余n-1个数中选最⼩的数,与第2个数交换位置;
3)依次类推,选择了n-1次后,这个数列已按升序排列。