考研程序设计题

四 程序设计题 (第1题10分,2、3题各15分,共30分) 

要 求:每小题要写出算法思路、程序流程、程序编码。 

1.       学校操场上有若干名学生排队,5人一行余2人,7人一行余3人,3人一行余1人,编写程序求操场至少有多少名学生。(10分)

:

#include

int main(){

  bool flag=true;

  int i=0;

  while(flag){

     if(i%5==2 && i%7==3 && i%3==1){

         printf("操场上最少有%d",i);

         flag=false;

     }

     i++;

  }

  return 0;

}

2.       银行的存款利率如下。某人有钱n元,如果要存20年时间,编程求得怎样存20年后的本利合计最多。(假定银行对定期存款过期不付利总)。(10分)

月利息率(%)

存储期限

0.63

一年

0.66

二年

0.69

三年

0.75

五年

0.84

八年

#include

#include

int main() {

    int i8, i5, i3, i2, i1, n8, n5, n3, n2, n1;

    float max = 0, term,n=100.0;

    for (i8 = 0; i8 < 3; i8++) /*穷举所有可能的存款方式*/

        for (i5 = 0; i5 <= (20 - 8 * i8) / 5; i5++)

            for (i3 = 0; i3 <= (20 - 8 * i8 - 5 * i5) / 3; i3++)

                for (i2 = 0; i2 <= (20 - 8 * i8 - 5 * i5 - 3 * i3) / 2; i2++) {

                    i1 = 20 - 8 * i8 - 5 * i5 - 3 * i3 - 2 * i2;

                    term = n * pow((double) (1 + 0.0063 * 12), (double) i1)

                            * pow((double) (1 + 2 * 0.0063 * 12), (double) i2)

                            * pow((double) (1 + 3 * 0.0069 * 12), (double) i3)

                            * pow((double) (1 + 5 * 0.0075 * 12), (double) i5)

                            * pow((double) (1 + 8 * 0.0084 * 12), (double) i8);

                    /*计算到期时的本利合计*/

                    printf("%f ",term);

                    if (term > max) {

                        max = term;

                        n1 = i1;

                        n2 = i2;

                        n3 = i3;

                        n5 = i5;

                        n8 = i8;

                    }

                }

    printf("For maxinum profit,he should so save his money in a bank:\n");

    printf(" made fixed deposit for 8 year: %d times\n", n8);

    printf(" made fixed deposit for 5 year: %d times\n", n5);

    printf(" made fixed deposit for 3 year: %d times\n", n3);

    printf(" made fixed deposit for 2 year: %d times\n", n2);

    printf(" made fixed deposit for 1 year: %d times\n", n1);

    printf(" Toal: %.2f\n", max);

    /*输出存款方式*/

}

3.       下面是一个5×5阶的螺旋方阵,编程打印出此形式的n×n (n<10)阶的方阵(顺时针方向旋进,且n为键盘输入)(15分)

1   2   3   4   5

16  17  18  19  6

15  24  25  20  7

14  23  22  21  8

13  12  11  10  9

解:

#include

int get(int x, int y, int lt, int n){

    if(x == 0)

       return lt+y;

    else if(y == 0)

       return lt+4*(n-1)-x;

    else if(y == n-1)

       return lt+n+x-1;

    else if(x == n-1)

       return lt+3*(n-1)-y;

    else

       return get(x-1, y-1, lt+4*(n-1), n-2);

}

int main(void){

    int n, i, j;

    scanf("%d", &n);

    for(i = 0; i < n; ++i) {

       for(j = 0; j < n; ++j)

           printf("%2d ", get(i, j, 1, n));

       putchar('\n');

    }

    return 0;

}

#include <stdio.h>

int array[100][100];

void square_matrix(int left, int right, int up, int down, int v, int n)

{

     int x, y, i, j, k, m;

     if (left <= right) {

         for (= left; <= right; ++) array[up][i] = ++;

         for (= up + 1;< down; ++) array[k][right] = ++;

         for (= right; > left; --) array[down][j] = ++;

         for (= down; > up; m--) array[m][left] = ++;

         square_matrix(left + 1, right - 1, up + 1, down - 1, v, n);

     } else 

         for (= 0; < n; ++) {

             for (= 0; < n; ++)

                 printf("%4d", array[x][y]);

             printf("\n");

         }

}

int main(int argc, char* argv[])

{

    int n;

    scanf("%d", &n);

    square_matrix(0, - 1, 0, - 1, 1, n);

    return 0;

}

补充(非递归算法):

#include <stdio.h>

int main(int argc, char* argv[])

{

    int a, b, c, d, i, n, num = 1, array[20][20];

 

    scanf("%d", &n);

    /* a, b, c, d分别为上、下、左、右边界,a、b为行号,c、d为列号 */

    for (a=0,b=n-1,c=0,d=n-1; a<=b; a++,b--,c++,d--){

        for (= c; i <= d; i++) array[a][i] = num++;

        for (= a + 1; i < b; i++) array[i][d] = num++;

        for (= d; i > c; i--) array[b][i] = num++;

        for (= b; i > a; i--) array[i][c] = num++;

    }

    for (= 0; i < n; i++) {

        for (= 0; a < n; a ++) printf("%5d", array[i][a]);

        printf("\n");

    }

    return 0;

}

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29421541/viewspace-1452553/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29421541/viewspace-1452553/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值