前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【趣学C语言和数据结构100例】26-30

【趣学C语言和数据结构100例】26-30

原创
作者头像
XIAZHI
发布2024-10-25 22:10:41
780
发布2024-10-25 22:10:41
举报
文章被收录于专栏:【趣学C语言和数据结构100例】

【趣学C语言和数据结构100例】

问题描述

26.利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来

27.给定一个不多于 5 位的正整数,要求: 1. 求它是几位数,2. 逆序打印出各位数字

28.一个 5 位数,判断它是不是回文数。

29.求不超过 n 位数,且由 0-7 所能组成的奇数个数。

30.一个偶数总能表示为两个素数之和,即把一个偶数分解成两个素数。

代码分析

26.递归的使用 分析:之前提到过递归在与定义func,并在func中使用func,和递归的结束条件。相当于一个栈。先进后出。调用func,并传入参数5,只要n>1,那么就进行输入读取,并func(4),直到n=1时,进行返回,并输出。 所以大体为如下:

代码语言:javascript
复制
func(n){
    定义字符串
    if(n<=1){
        输入最后一次
        输出最后一次
    }
    else{
        输入第1次
        递归调用n-2
        输出第1次   //先调用到最后一步,然后输出
    }

}

27.递归的深度即使用 分析:之前提到过递归在与定义func,并在func中使用func,和递归的结束条件。它是几位数,即递归的深度可以定义全局变量,在每次递归时进行计数。逆序打印,可参考26。本题采用==直接除==计算深度。逆序打印数字则采用%。

28.判断是不是回文数 分析:如 12321 是回文数,个位与万位相同,十位与千位相同。即:找到个位和万位,十位与千位进行比较。直接采用/和%进行计算即可。

29.由 0-7 所能组成的奇数个数 找规律: 1.最后一位为奇数1357 ,4种 2.如果n为2位数,则74 7是因为首数字不能为0 3.如果n为3位数,则78*4

30.偶数分解成两个素数 难点:判断一个数是否是素数 写一个函数Isprimer,则可以Isprimer(n) &amp;&amp; (x-n)来进行偶数分解成两个素数 判断一个数是否是素数 写一个for循环,到sqrt(n),即平方根,如果n%i存在=0的情况则直接返回0,如果没有,则返回1。

代码实现

代码语言:javascript
复制
#include <stdio.h>

void func(int n){
    char next;
    if(n<=1){
        next =getchar();
        printf("输出相反结果为:");
        putchar(next);
    }
    else{
        next=getchar();
        func(n-1);
        putchar(next);
    }
}
//	判断一个数是否是素数
int Isprimer(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0)
            return 0;
    }
    return 1;
}

int main()
{
//	26.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
    int i=5; 
    printf("输入递5个以内字符:"); 
    func(i);

//	27.给定一个不多于5位的正整数,要求:1.求它是几位数,2.逆序打印出各位数字
    int n,sum=0,temp;
    printf("输入不多于5位的正整数:");
    scanf("%d",&n);
    temp=n;
    for(int i=0;i<5;i++){
        if(n!=0){
            sum++;
            n /= 10;
        }
    }
    printf("它是%d位数\n",sum);
    printf("逆序打印数字:");
    while (temp != 0) {
        printf("%d ", temp % 10); 	// 打印最后一位数字
        temp /= 10; 	// 去掉最后一位数字
    }
    printf("\n");

//	28.一个5位数,判断它是不是回文数。
//	如 12321 是回文数,个位与万位相同,十位与千位相同
    int a,b,c,d,e,f,x;
    printf("输入5位的正整数:");
    scanf("%d",&x);
    a=x/10000;
    b=x%10000/10;
    c=x%10000/100;
    d=x%10000/10;
    e=x%10;
    if(e==a && b==d){
        printf("这个数是回文数");
    }
    else{
        printf("这个数不是回文数");
    }

//	29.求不超过n位数,且由 0-7 所能组成的奇数个数。 
//	思路:
//	1.最后一位为奇数1357 ,4种
//	2.如果2位数,则7*4   7是因为首数字不能为0
//	3.如果3位数,则7*8*4
    printf("输求不超过n(n>=2)位数,且由 0-7 所能组成的奇数个数。\n");
    long s=4,sum=0,n;
    printf("输入n位数的n:");
    scanf("%d",&n);
    for(int i=2;i<=n;i++){
        if(i==2){
            s *= 7;
        }
        else{
            s *= 8;
        }
        sum += s;
    }
    printf("不超过8位数,且由 0-7 所能组成的奇数个数为%ld个。",sum);

//	30.一个偶数总能表示为两个素数之和,即把一个偶数分解成两个素数。
//		解析:重点在于要学会函数:判断一个数是否是素数
    int n,i;
    do{
        printf("输入偶数:");
        scanf("%d",&n);
    }while(n%2!=0);
    for(i=1;i<n;i++){
        if(Isprimer(i)&&Isprimer(n-i)){
            break; 
        }
    }
    printf("输入偶数%d解成两个素数%d和%d。",n,i,n-i);
    
    return 0;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【趣学C语言和数据结构100例】
    • 问题描述
      • 代码分析
        • 代码实现
        相关产品与服务
        腾讯云代码分析
        腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,助力维护团队卓越代码文化。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档