C语言算法小程序

99乘法表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
if (j > i)
break;
else
{
printf("%d × %d = %-2d ", i, j, i * j);
}
}
printf("\n");
}
}

求指定底数幂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
int main()
{
float x, y, res = 1, i = 0;
printf("请输入底数:");
scanf("%f", &x);
printf("请输入幂(正数):");
scanf("%f", &y);
if (y < 0)
{
printf("请输入正数"); /* code */
}
else
{

while (i < y)
{
res *= x; /* code */
i++;
}
printf("res=%f\n", res); /* code */
}
}

数字打印机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
int x, y;
printf("请输入想要循环的数字(整数):");
scanf("%d", &y);
printf("请输入循环次数(注意不得超过一百,且为正整数):");
scanf("%d", &x);
if (x > 100 || x < 1)
{
printf("您输入的数不符合规矩"); /* code */
}
else
{
printf("即将开始循环%d次\n", x);
for (int i = 0; i < x; i++)
{
printf("%d\n", y);
}
}
}

摇骰子中奖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
void main()
{
int a;
printf("请在1-6之间输入一个数\n");
scanf("%d", &a);
if (a > 6 || a < 1)
{
printf("您输入的数不在范围");
}
else
{
switch (a)
{
case 6:
printf("恭喜中将");
break;
case 4:
printf("恭喜中奖");
break;
case 2:
printf("恭喜中奖");
default:
printf("很遗憾,未中奖");
break;
}
}
}

自动寻找水仙花数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main()
{
for (int i = 100; i < 1000; i++)
{
int b = i / 100, /* code */
s = i / 10 % 10,
g = i % 10;
if (b * b * b + s * s * s + g * g * g == i)
{
printf("%d是水仙花数!\n", i); /* code */
}
}
}

0-9从大到小排序

基础版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
int arr[10] = {3, 5, 7, 2, 9, 0, 6, 1, 8, 4}, a;
for (int x = 0; x < 10; x++)
{
for (int i = 1; i < 10; i++)
{
if (arr[i] > arr[i - 1])
{
a = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = a;
}
}
}
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
}

优化版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
int arr[10] = {3, 5, 7, 2, 9, 0, 6, 1, 8, 4}, a;
for (int x = 10; x > 0; x = x - 1)
{
for (int i = 1; i < 10; i++)
{
if (arr[i - 1] > arr[i])
{
a = arr[i - 1];
arr[i - 1] = arr[i];
arr[i] = a;
}
}
}
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
}

高级优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
int main()
{
int arr[10] = {3, 5, 7, 2, 9, 0, 6, 1, 8, 4}, a;
for (int x = 0; x < 10; x++)
{
_Bool flag = 0;
for (int i = 1; i < 10 - x; i++)
{
if (arr[i - 1] > arr[i])
{
a = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = a;
flag = 1;
}
}
if (flag == 0)
break;
}
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
}

打劫穷舍算法

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main()
{
int value[] = {254, 545, 654, 578, 845, 754, 854, 954}, size = 8, dp[size], result; /*dp[size]要在size后*/
//*前面两个都已经知道了所以直接写出来
dp[0] = value[0];
dp[1] = value[1];
for (int i = 2; i < size; i++)
dp[i] = dp[i - 1] > dp[i - 2] + value[i] ? dp[i - 1] : dp[i - 2] + value[i]; /*递推公式*/
result = dp[size - 1];

printf("%d是最大钱数",result);
}

回文串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
int main()
{
char str[64];
gets(str);
int len = strlen(str), left = 0, right = len - 1;

_Bool flag = 1;

while (left<right)
{
if (str[left]!=str[right])
{ flag = 0;
break;
}
left++;
right--; /* code */
}

puts(flag ? "是回文串" : "不是回文串");
}

求斐波那契数列指定位数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
long long target, a = 1, b = 0, c = 0;
printf("请输入想要获取的斐波那契位数(不超过153):");
scanf("%d", &target);
if (target == 1)
{
printf("1");
}
else
{
for (int i = 0; i < target - 1; i++)
{
c = b;
b = a;
a = a + c;
}
printf("%lld", a);
}
}

数组优化版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main()
{
long long fib[a],a,fb;
printf("请输入想要获取的斐波那契位数(不超过153):");
scanf("%d", &a);
fib[1] = fib[0] = 1;
for (long long i = 2; i < a; i++)
{
fib[i] = fib[i - 1] + fib[i - 2];
fb = fib[i-1]; /* code */
}
printf("%lld",fb);
}