(2020.9.12)算法
练习1:从大到小输出三个值ide
算法实现函数
a中放最大值优化
b次之spa
c最小数学
int a = 0;it
int b = 0;io
int c = 0;class
scanf_s("%d%d%d", &a, &b, &c);(%d%d%d之间若是须要加逗号的话,引用
那你在屏幕上输出的时候也要加上逗号,不然会存在问题。%d%d%d之间如
果须要加#的话,那你在屏幕上输出的时候也要加上#,不然会存在问题)
if (a < b)
{
int tmp = a;
a = b;
b = tmp;
}
if (a < c)
{
int tmp = a;
a = c;
c = tmp;
}
if (b < c)
{
int tmp = b;
b = c;
c = tmp;
}
printf("%d%d%d\n", a, b, c);(printf不用取地址)
练习2:
打印1~100之间全部3的倍数的数字:
int i = 0;
for (i = 1; i <= 100; i++)
{
if (i % 3 == 0)
{
printf("%d\n", i);
}
练习3:
给定两个数,求这两个数的最大公约数
(展转相除法):
假设有两个数24,18:将24%18,结果余6,再将18%6,结果为0
,则此时6即为二者最大公约数
int m = 24;
int n = 18;
int r = 0;
scanf_s("%d%d", &m, &n);
while (m % n )
{
r = m % n;
m = n;
n = r;
}
printf("最大公约数为:%d\n", n);
练习4:打印1000~2000的闰年,而且打印共有多少个闰年
判断闰年:
1.能被4整除而且不能被100整除是闰年
2.能被400整除是闰年(这两个条件的都是闰年哦!!!)
int year = 0;
int count = 0;
for (year = 1000; year <= 2000; year++)
{
if (year%400==0)
{
printf("%d\n", year);
count++;
}
else if (year % 4 == 0 && year % 100 != 0)
{
printf("%d ", year);
count++;
}
}
printf("闰年总共有:%d 个", count);
或者直接一句话搞定鸭:
if(((year%4==0)&&(year%100!=0))||(year%400=0))
练习5:打印100~200之间的素数,而且统计一共有多少个
素数通常指质数。质数是指在大于1的天然数中,除了1和它自己以
外再也不有其余因数的天然数。
素数判断规则:
1.试除法
产生2~i-1的数字
int i = 0;
int n = 100;
int count = 0;
for (i = 1; i <= 200; i++)
{
int j = 0;
for (j = 2; j < i; j++)
{
if(i% j==0)
{
break;
}
}
if (j == i)
{
count++;
printf("%d ", i);
}
}
printf("一共有:%d个", count);
将上面的代码更加优化!!!:
若是i不是素数,i能够写成i=a*b,a\b中至少有一个数字<=开平方i
我只要在开平方i以前找到一个数字可以整除i,就证实它不是素数
sqrt--开平方的数学库函数,须要引用数学头文件#include<math.h>
int j = 2;
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+=2)(由于偶数不可能)
{
for (j = 2; j <=sqrt(i); j++)(sqrt(i)表明将i开平方)
{
if (i % j == 0)
{
break;
}
}
if (j>sqrt(i))
{
printf("%d ", i);
count++;
}
}
printf("一共有%d 个", count);
以上优化过程都仍是试除法,不过缩小了范围
《素数求法的n种境界》
练习6:数9的个数
数一下1~100的全部整数中出现多少个数字9:9,19,29,39,49,59,
69,79,89,90,99,91,92,93,94,95,96,97,98
思路:
若是个位为9的话模上10结果为9
若是数字十位是9的话,那么这个数字除上10商为9
int i = 1;
int count = 0;
for (i = 1; i <= 100; i++)
{
if (i/10==9)
{
printf("%d ", i);
count++;
}
else if (i % 10 == 9)
{
printf("%d ", i);
count++;
}
}
printf("一共有:%d个 ", count);
练习7:分数求和
计算1/1-1/2+1/3-1/4+1/5-...+1/99-1/100的值
1.先把-号所有改为+号
int i = 0;
double sum = 0.0;(那咱们加起来的和就也为浮点数了)
for (i = 1; i <= 100; i++)
{
sum += 1 / i;
}
printf("%lf\n", sum);
(这样为错误由于结果只是为1,由于1/2的结果为0,而咱们获得的结果想为小数,
要获得小数必须保证除号两端必须得有一个数是浮点数,i已是整型了,就把分子1
改为浮点型1.0,用1.0/i获得的结果就为小数了)
最终结果:
int i = 0;
double sum = 0.0;
for (i = 1; i <= 100; i++)
{
sum += 1.0 / i;
}
printf("%lf\n", sum);
2.计算1/1-1/2+1/3-1/4+1/5-...+1/99-1/100的值
方法一:(比较简单)int i = 0;
double sum = 0.0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum += flag*1.0 / i;
flag = -flag;(很巧妙就作到了,也能够利用奇数偶数来写成代码)
}
printf("%lf", sum);
也能够利用奇数偶数来写成代码:
方法二:
int i = 0;
double sum = 0.0;
int count = 1;
for (i = 1; i <= 100; i++)
{
if (count % 2 != 0)
{
sum += 1.0 / i;
count++;
}
else
{
sum -= 1.0 / i;
count++;
}
}
printf("%lf", sum);