提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
1.素数
素数:除了1和本身不能被任何数整除。
算法描述:使用穷举的思想,将所有可能的解读进行列举并进行判断,符合条件的进行则被认为是素数。
//从命令行输入一个整数范围,获得该范围的素数
#include <stdio.h>
int is_prime(int n)
{
int i=0;
for(i = 2;i<n;++i)
{
if(n%i == 0)
{
return 0;
}
}
return 1;
}
void get_prime(int begin,int end)
{
for(begin;begin<end;++begin)
{
if(is_prime(begin))
{
printf("%d ",begin);
}
}
return ;
}
int main(void)
{
printf("input range from num1 to num2\n");
int i,j=0;
scanf("%d",&i);
scanf("%d",&j);
get_prime(i,j);
return 0;
}
2.回文数
问题描述:回文数就是这个数顺着看和倒着看是一样的,例如:111,121,88等。
代码思想:拆数和组数的思想,
拆:每次拆对数进行求余,拿到原数的个位数;将原数进行除10,数就会向右移动一位;等数拆到最后一个数就会变成0,循环结束。
组:将拿到的个位乘以10变成十位或者百位,组成新的数。
将新数置零。
#include <stdio.h>
void pal_number(int num)
{
int ori_num = 0;
int tem_num = 0;
int tem1_num = 0 ;
int new_num = 0;//新数
while(ori_num < num)
{
//将原数进行保存
tem_num = ori_num;
while(tem_num)
{
//拆数
tem1_num = tem_num % 10;
//右移
tem_num /= 10;
//组数
new_num = new_num*10 + tem1_num;
}
if(new_num == ori_num)
{
printf("%d ",new_num);
}
//置零
new_num =0;
++ori_num;
}
printf("\n");
}
int main(int argc, const char *argv[])
{
printf("please input a num\n");
int num =0;
scanf("%d",&num);
pal_number(num);
return 0;
}
代码展示:
3.水仙花数
问题描述:水仙花数是一个三位数等于它的个位数^3+十位数 ^3+百位数 ^3,如果是两位数就是每个数的平方,四位数就是每个数的四次方。
代码思想;分别拿到该数 的个位数,十位数,百位数,条件判断即可。
代码展示:
#include <stdio.h>
void nar_num(int num)
{
int n = 0;
int i = 0;
int j = 0;
int k = 0;
for(n =100 ;n < num;++n)
{
i = n % 10;
j = n /10 % 10;
k = n /100;
if(n == i*i*i+j*j*j+k*k*k)
{
printf("%d ",n);
}
}
printf("\n");
}
int main(int argc, const char *argv[])
{
printf("please input a num\n");
int num =0;
scanf("%d",&num);
nar_num(num);
return 0;
}
结果展示:
4.斐波拉契数列
定义:波拉契数列又称为黄金分割数列,为了解决兔子繁殖问题。
斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
代码如下:
#include <stdio.h>
//递归版本
int Fibonacci(int n)
{
if(n <=2)
{
return 1;
}
else
{
return Fibonacci(n-1) + Fibonacci(n-2);
}
}
//普通版本
int Fibonacci(int n)
{
if(n ==1 || n==2 )
{
return 1;
}
else
{
int n1 = 1;
int n2 = 1;
int n3 = n1+n2;
int i=0;
for(i=2;i<n;++i)
{
n3 = n1+n2;
n1 = n2;
n2 = n3;
}
return n3;
}
}
int sum_fibo(int n)
{
int ret,i = 0;
int sum = 0;
for(i=1;i<=n;i++)
{
ret = Fibonacci(i);
sum = sum+ret;
}
return sum;
}
int main(int argc, const char *argv[])
{
int num = 0;
scanf("%d",&num);
int ret = Fibonacci(num);
int sum = sum_fibo(num);
printf("ret%d\n",ret);
printf("sum%d\n",sum);
return 0;
}
4.最大公约数
思想:从两个数种较小的数开始,一致到1,找到可以两个数对这个数进行求余
出错处理:两个数种有一个数是0,会输出输入错误。
#include <stdio.h>
int min_num(int a ,int b)
{
if( a < b)
{
return a;
}
else
{
return b;
}
}
int approx_num(int a ,int b)
{
if(0 ==a || 0 ==b )
{
return 0;
}
int begin = min_num(a,b);
int i = 0;
for(i = begin ;i > 0;i--)
{
if(a%i == 0 && b%i==0)
{
return i;
}
}
}
int main(int argc, const char *argv[])
{
printf("please input two num\n");
int a,b =0;
scanf("%d",&a);
scanf("%d",&b);
int ret = approx_num(a,b);
if(ret)
{
printf("ret%d\n",ret);
}
else
{
printf("input error\n");
}
return 0;
}
运行结果:
5.最小公倍数
思想:从两个数中的较大数开始寻找,只要找到同时把着两个数都能整除就可以,公倍数的范围是从两个数的较大的数开始,到这两个数的乘积。
出错处理:两个数种有一个数是0,会输出输入错误。
#include <stdio.h>
int get_max(int a ,int b)
{
if( a > b)
{
return a;
}
else
{
return b;
}
}
int mul_num(int a ,int b)
{
if(a == 0 || b == 0)
{
return 0;
}
int begin = get_max(a,b);
int i =0 ;
for(i= begin;i <=(a*b) ;++i)
{
if( i%a == 0 && i%b ==0)
{
return i;
}
}
}
int main(int argc, const char *argv[])
{
printf("please input two num\n");
int a,b=0;
scanf("%d",&a);
scanf("%d",&b);
int ret = mul_num(a,b);
if(ret)
{
printf("ret = %d\n",ret);
}
else
{
printf("input error\n");
}
return 0;
}
运行结果: