算法课例题

来源:互联网 发布:工作证图片制作软件 编辑:程序博客网 时间:2024/06/06 18:33

1. * 1

       *** 3

      *****5

     *******7

    *********9

---5行9列

#include <stdio.h>


int main(int argc,constchar * argv[]) {

    for (int i=1; i<=5; ++i) {

        for (int j=1; j<=9; ++j) {

            if (j<=i+4&&j>5-i) {//重要

                printf("*");

            }

            else

                printf(" ");

            }

        printf("\n");

        }

    return0;

    }


思路:

首先用两个双重for循环输出5行9列,其中内循环if判断语句:满足某条件则输出“*“”,否则输出“ ”。

输出“*”的条件为:①j<=i+4

*****    

******   

*******  

******** 

*********

再用另一条件将左半边去掉:②j>5-i

    *    

   ***   

  *****  

 ******* 

*********


注意:表达式1&&表达式2 只有当两个表达式都为true时,整个表达式才为true


2.*********

     *********

       *********

  *********

   *********

5行13列

#include <stdio.h>


int main(int argc,constchar * argv[]) {

    for (int i=1; i<=5; ++i) {

        for (int j=1; j<=13; ++j) {

            if (j>i-1&&j<i+9) {

                printf("*");

            }

            else

                printf(" ");

            }

        }

printf("\n");

    }

    return0;

}


思路:同上,把四边形想象成一个长方形,再用if条件减去部分形状


3.11111111111111111

   12222222222222221

   12333333333333321

   123......

   1

   1

   1

   1

   1

   1

   1

   1

   1

   1

   1

   1

   1

以此类推,形成一圈圈的数字,由外到内,由小到大,最中间的数为9


#include <stdio.h>


int min(int x,int y)

{

    return x<y?x:y;

}

int main(int argc,constchar * argv[]) {

    int ii,jj;

    int iii,jjj;

    for (int i=1; i<=17; ++i) {

        ii=18-i;   //保证顶部底部一致

        iii=min(i,ii);

        for (int j=1; j<=17; ++j) {

            jj=18-j;   //保证左边右边一致

            jjj=min(j,jj);

            printf("%d",min(iii,jjj)); //输出行列最小值

        }

        printf("\n");//足够17行,换行

    }

    return0;

    }


结果:

11111111111111111

12222222222222221

12333333333333321

12344444444444321

12345555555554321

12345666666654321

12345677777654321

12345678887654321

12345678987654321

12345678887654321

12345677777654321

12345666666654321

12345555555554321

12344444444444321

12333333333333321

12222222222222221

11111111111111111


4.荡秋千






<============>


#include <stdio.h>


int main(int argc,constchar * argv[]) {

    int sp=0;//控制边界

    int dx=1;//移动空格个数

   for (int i=0; i<99999; ++i) {//循环多少次

        printf("\n\n\n\n\n\n\n\n\n");

        for (int j=0; j<sp; ++j) {

            printf(" ");//空格

        }

        printf("<=============> \r");

        if(sp>190||sp<0)//过界

            dx=-dx;

        sp+=dx;

        for (int k=0; k<9; ++k) {//延时

            for (int k=0; k<9999; ++k) {

                printf("");

            }

        }

    }

    return0;

}


有一个疑问:运行的时候偶尔会闪。

原创粉丝点击