王道复试C语言第一章枚举和模拟问题(上)——代码笔记分享

枚举题:给条件列出所有可能值

2.1求所有三位数abc+bcc=532

#include <stdio.h>
#include <stdlib.h>

int main()
{
    //枚举:给条件列出所有可能值
    //求三位数abc+bcc=532
    int a,b,c;
    for(a=0;a<10;a++){
        for(b=0;b<10;b++){
            for(c=0;c<10;c++){
                if(a*100+b*10+c+b*100+c*10+c==532)
                    printf("%d %d %d\n",a,b,c);
            }
        }
    }
    return 0;
}

2.2求所有四位数abcd,其九倍与其逆序数相等

#include <stdio.h>
#include <stdlib.h>

int main()
{
    //求四位数abcd,其九倍与其逆序数相等
    int a,b,c,d;
    for(a=0;a<10;a++){
        for(b=0;b<10;b++){
            for(c=0;c<10;c++){
                for(d=0;d<10;d++){
                    if((a*1000+b*100+c*10+d)*9==d*1000+c*100+b*10+a)
                    printf("%d%d%d%d\n",a,b,c,d);
                }
            }
        }
    }
    return 0;
}

2.3求所有平方为对称的不大于256的数

如11的平方为121是对称

#include <stdio.h>
#include <stdlib.h>

//循环:知道次数用for,不知道用while
//对称平方数
int reverse(int num)
{
    int temp=0;
    while(num!=0){
        temp=temp*10+num%10;
        num=num/10;
    }
    return temp;
}

int main()
{
    int i;
    for(i=0;i<257;i++){
        if(i*i==reverse(i*i))
            printf("%d\n",i);
    }
    return 0;
}

图形题:二维数组+数字规律

2.4输入一个高度h,输出一个高度为h、上底边长度为h的*梯形

#include <stdio.h>
#include <stdlib.h>

int main()
{
    //输入一个高度h,输出一个高度为h、上底边长度为h的梯形
    int h;
    printf("请输入高度h:");
    scanf("%d",&h);
    for(int i=0;i<h;i++){
        for(int j=0;j<2*h-2*(i+1);j++)
            printf(" ");
        for(int k=0;k<h+2*i;k++)
            printf("*");
        printf("\n");
    }
    return 0;
}

2.5叠筐

#include <stdio.h>
#include <stdlib.h>
int main()
{
    //图案问题:二维数组+数字规律

    //例题2.5叠筐
    //题目描述:把一个个大小差一圈的筐叠上去,使待从上往下看时,边筐花色交错。
    //输入是一个个三元维,分别是:外筐尺寸n(n为满足0<n<80的奇整数,中心花色字符,外面花色字符,后二者都为ASCII可见字行。
    //输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间盥有一行间隔。
    int n;
    char in,out;
    printf("请输入外筐尺寸n(n为满足0<n<80的奇整数,中心花色字符,外面花色字符:");
    char a[80][80];
    int length;//框长度
    int x,y;//起点下标
    bool flag=true;//框之间要空一行,判断是否是第一行
    char cur=in;//当前填框字符
    while(scanf("%d %c %c",&n,&in,&out)!=EOF){
        if(flag == true){
            flag=false;
        }else{
            printf("\n");
        }
        for(length=1,x=n/2,y=n/2;length<=n;length+=2,x--,y--){
        //每次循环:填满一个长度为length的正方形
            for(int i=x,j=y;i<x+length;++i){
                //左上到左下:j不变,i从x到length-1
                a[i][j]=cur;
            }
            for(int i=x,j=y+length-1;i<x+length;++i){
                //右上到右下:j不变,i从x到length-1
                a[i][j]=cur;
            }
            for(int i=x,j=y;j<y+length;++j){
                //左上到右上:i不变,j从y到y+length-1
                a[i][j]=cur;
            }
            for(int i=x+length-1,j=y;j<y+length;++j){
                //左下到右下:i不变,j从y到y+length-1
                a[i][j]=cur;
        }
        if(cur==in){
            cur=out;
        }
        else{
            cur=in;
        }
    }
    //磨掉角
    if(n!=1){
        a[0][0]=' ';
        a[0][n-1]=' ';
        a[n-1][0]=' ';
        a[n-1][n-1]=' ';
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)
            printf("%c",a[i][j]);
        printf("\n");
    }
    }
    return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值