C语言学习与进阶
第一天
99乘法表
需求:需要在任意IDE中,用C语言来展示9*9乘法表,(要求去掉多余项)
下面展示代码
。
#include <stdio.h>
int main() {
int result;
for (int i = 0; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
result = i * j;
printf("%d*%d=%-3d",i,j,result);
}
printf("\n");
}
}
/*结果展示*/
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
Process finished with exit code 0
这样就解决了需求
但是引发了新的思考
考虑到算法的问题
是否能优化算法,从for的嵌套O(n^2)到O(n)呢?
Let’s do it.
#include <stdio.h>
void Optim(int i, int j)
{
if(i>j)
return;
printf("%dx%d=%d\t", i, j, i*j);
Optim(i+1, j);
}
void O(int n)
{
if(n==1)
printf("1x1=1\n");
else
{
O(n-1);
Optim(1, n);
putchar('\n');
}
}
int main()
{
O(9);
return 0;
}
结果展示
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
Process finished with exit code 0
第一天愉快的结束了
希望大家能够集思广益,提供更多的方法