【C语言刷题】PTA基础编程题目集精选

news2024/11/17 0:07:58

作者:@匿名者Unit
专栏:C语言刷题
在这里插入图片描述

目录

  • 题目精选
    • 6-7 统计某类完全平方数
      • 6-9 统计个位数字
        • 6-10 阶乘计算升级版
          • 6-11 求自定类型元素序列的中位数

题目精选

6-7 统计某类完全平方数

我们先看一下题目要求:
在这里插入图片描述
根据题目给出的要求:完全平方数至少有两位相同的数,我们可以将非完全平方数排除在外:

int IsTheNumber(const int N)
{
	if ((N <= 0||sqrt(N) - (int)sqrt(N) > 0)
    	{
      	  return 0;
   		}
}

这里我使用了sqrt来判断完全平方数,根据MSDN

double sqrt( double x );

我们可知sqrt返回double类型的数值,通过强制类型转换int再作差可将非完全平方数筛查出来。
那么相同数字的个数又如何判断呢?这里我们想到可以通过while循环将N的每一位拿下来,通过一个大小为十的数组计数器进行判断。
完整代码附上,大家仔细体会:

int IsTheNumber(const int N)

{
    if ((N <= 0||sqrt(N) - (int)sqrt(N) > 0)
    {
        return 0;
    }
    else
    {
        int M = N;//形参是const修饰的常变量
        int ch[10] = { 0 };
        while (M > 0)
        {
            for (int i = 0; i <= 9; i++)
            {
                if (M % 10 == i)
                {
                    ch[i] += 1;
                    if (ch[i] == 2)
                    {
                        return 1;
                    }
                }

            }
            M = M / 10;
        }
        return 0;
    }
}

6-9 统计个位数字

我们先来看一下题目:
在这里插入图片描述
这题比较简单使用while判断每一位,再注意下题目的细节即可AC

int Count_Digit ( const int N, const int D )
{
    int count=0;
    if(N<0)
    {
        int a=-N;
        while(a>0)
        {
            if(a%10==D)
            {
                count++;
            }
            a=a/10;
        }
        return count;
    }
    else if(N==0)
        return 1;
    else
    {
        int a=N;
        
        while(a>0)
        {
            if(a%10==D)
            {
                count++;
            }
            a=a/10;
        }
        return count;
    }
}

6-10 阶乘计算升级版

题目:
在这里插入图片描述
乍一看这题不就是求个阶乘吗?我就讲代码放上去:

void Print_Factorial ( const int N )
{
    if(N<0)
        printf("Invalid input");
    else
    {
        long long num=1;
        for(int i=1;i<=N;i++)
        {
            num*=i;
        }
        printf("%ld",num);
    }
}

结果发现当N取得比较大是,阶乘数就远超出了long long的数据范围。
这里我们就要了解一个新的算法思想————高精度算法,当我们遇到连最大范围的longlong都无法储存的情况下,需要通过特殊的方法计算出我们想要的答案。
那我们就通过此题初窥高精度算法

转载:
原文链接
例如4的阶乘为24,则num[0]=4,num[1]=2
这种方法的原理就是将数字的每一位拆分出来存到数组,在求阶乘时,每一次乘法都分解为数组的每一位乘这个数,例如:
2的阶乘,num[0]=num[0]*2%10=2;
3的阶乘,num[0]=num[0]*3%10=6;
4的阶乘,num[0]=num[0]*4%10=4,而此时产生了进位,进位为2,所以num[1]=进位=2;
而5的阶乘,num[0]=num[0]*5%10=0,进位为2,num[1]=(num[1]*5+进位)%10=2,进位为1,num[2]=进位=1;得到5的阶乘为120。

代码如下:

void Print_Factorial(const int N) {
    if (N < 0)
        printf("Invalid input");
    else {
        int num[3000] = { 0 }, j, n = N;    //num记录各个位上的数字,全初始化为0
        num[0] = 1;                   //个位初始化为1
        int l = 0;                    //记录结果的位数
        int carry = 0;                //低位向高位的进位
        for (int i = 2; i <= n; i++) {
            for (j = 0; j <= l; j++) {
                int temp = num[j] * i + carry;
                num[j] = temp % 10;     //该位的数
                carry = temp / 10;      //进位的数
            }
            while (carry) {          //拓展结果的总位数记录进位的数,直到进位为0
                num[j++] = carry % 10;  //该位的数
                carry /= 10;          //进位的数
                l++;
            }
        }
        for (; l >= 0; l--)              //数组按照从地位到高位的方式存储结果,逆向输出结果
            printf("%d", num[l]);
    }
}

6-11 求自定类型元素序列的中位数

在这里插入图片描述
这题的思路就很清晰,先将传过来的数组排序,再返回中位数即可。有两点需要注意的当N为偶数时,中位数并不是中间两个数的平均数,而是较大的那个,这是题目与我们常识不同的地方。还有就是,排序方法的选择,如果你使用冒泡排序的话,会有一个测试点卡时,导致无法AC。而我使用了快排qsort函数,代码如下奉上,其实下面的代码还是有不足的地方你能发现吗?评论或者私信教教我吧。

int cmp(const void* a, const void* b) //当然,可以直接写为int cmp ( const int\* a , const int\* b ) 
{
    return *(ElementType*)a - *(ElementType*)b;//回调函数
}


ElementType Median(ElementType A[], int N)
{
    qsort(A, N, sizeof(ElementType), cmp);//快排qsort 头文件<stdlib.h>
   /* for (int i = 0; i < N - 1; i++)
    {
        int j = 0;
        for (j = 0; j < N - i - 1; j++)
        {
            if (A[j] > A[j + 1])
            {
                ElementType tmp = A[j];
                A[j] = A[j + 1];
                A[j + 1] = tmp;
            }
        }
    }*/
    if (N % 2 == 0)
    {
        //ElementType sum = (A[N / 2 - 1] + A[(N + 2) / 2 - 1]) / 2;
        return (A[N / 2 - 1] > A[(N + 2) / 2 - 1] ? A[N / 2 - 1] : A[(N + 2) / 2 - 1]);
    }
    else
        return A[(N + 1) / 2 - 1];
}

感谢阅读,共同进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

瑞格科技IPO被终止:曾拟募资5.6亿 江振翔三兄弟为实控人

雷递网 雷建平 12月17日浙江瑞格智能科技股份有限公司&#xff08;简称&#xff1a;“瑞格科技”&#xff09;日前IPO被终止。瑞格科技计划募资5.59亿元&#xff0c;其中&#xff0c;2.55亿元用于年产1000万套汽车配件技改项目&#xff0c;9240万元用于年产500万件智能传感器及…

css深度选择器deep

1.为什么要有deep 1.当我们给组件设置scoped的时候&#xff0c;此时我们组件的css样式只会对自己的内容生效&#xff0c;不会对子组件里面的内容生效。 <style lang"scss" scoped> .login-page {min-height: 100vh;background: url(/assets/login-bg.svg) no-r…

大脑网络的图论分析

利用图论测量大脑结构和功能网络的四个步骤: 定义网络节点——在脑电研究中&#xff0c;电极天然形成节点&#xff1b;在磁共振研究中&#xff0c;可以使用不同的脑图谱作为节点或者基于体素水平进行研究估计节点之间的连接性——结构上&#xff0c;可以由DTI计算两个脑区之间…

一文深度剖析扩散模型究竟学到了什么?

Title: <Diffusion Art or Digital Forgery? Investigating Data Replication in Diffusion Models> Paper: https://arxiv.org/pdf/2212.03860.pdf Github: Just get the point. 文章目录导读技术提升动机贡献背景图像检索与复制检测深度学习中的记忆语言模型中的记忆扩…

Linux Qt连接达梦数据库

最近因为工作需要&#xff0c;需要使用Qt连接达梦数据库&#xff0c;在Linux上比较麻烦&#xff0c;首先需要自己编译UnixODBC和Qt的QODBC库&#xff0c;其次还有各种环境配置。这里在安装好后记录一下&#xff0c;以后找起来方便。 先说下我的电脑是麒麟V10系统飞腾的CPU&…

共享SimpleDateFormat的并发问题

1、问题提出 梳理订单逻辑时发现对日期格式进行format的代码有如下写法 OneDateUtil中定义了一个全局static的SimpleDateFormat对象。SimpleDateFormat对象不是线程安全的&#xff0c;在多线程环境下容易造成数据转换和处理错误。 2、为什么SimpleDateFormat线程不安全 Sim…

[附源码]Node.js计算机毕业设计红色景点自驾游网站管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

MySQL~索引

7、索引 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 提取句子主干&#xff0c;就可以得到索引的本质&#xff1a;索引是数据结构。 7.1、索引的分类 在一个表中&#xff0c;主键索引只能有一个&#xff0c;唯一…

微机原理与接口技术笔记(持续更新)

文章目录前言储存系统与技术材料高速储存器缓冲储存器&#xff08;Cache&#xff09;材料&#xff0c;局部性&#xff0c;访问方式Cache全相联映射Cache交换与一致性单核CPU一致性处理多核CPU的MESI协议主储存器&#xff08;内存&#xff09;主要技术指标容量带宽内存模组与内存…

机器学习100天(九):009 多项式回归理论

机器学习100天,今天讲的是:多项式回归理论! 在前两期视频我们讲解了简单线性回归理论,并解决了一个房价预测的问题,建立了一个房价与地区人口的线性关系。然而,如果数据的分布不是简单的线性关系,又该怎么做呢? 一、多项式回归 我们来看一个例子,在这个二维平面上,…

【蓝桥杯】砝码称重

3417. 砝码称重 - AcWing题库 题意&#xff1a; 思路回顾&#xff1a; 首先这道题一开始我没想用DP做&#xff0c;看到标签是入门题就没想DP qwq 其实这就是一个普通背包 一开始设计状态设计不出来&#xff0c;刚开始设的是dp[i][j]表示前i个物品能表示j种重量 显然是不行…

计算机毕业设计django基于python商品比价平台

项目介绍 随着计算机技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的商品比价系统的平台,这样可以有效地解决数据商品比价系统混乱的局面。 本文首先介绍了商品比价系统的发展背景与发展现状,…

年后面试,给你提6点建议!

你好&#xff0c;我是田哥转眼年底&#xff0c;很大部分人都在观望&#xff0c;甚至已经开始着手准备明年的面试了&#xff0c;不知道屏幕前的你是如何打算的&#xff1f;从现在开始&#xff0c;到明年三月份还有两个多月的时间&#xff0c;时间不多&#xff0c;但也不少了。只…

优秀的后端应该有哪些开发习惯?

见识过各种各样的代码,优秀的、垃圾的、不堪入目的、看了想跑路的等等,所以这篇文章记录一下一个优秀的后端 Java 开发应该有哪些好的开发习惯。 拆分合理的目录结构 受传统的 MVC 模式影响,传统做法大多是几个固定的文件夹 controller、service、mapper、entity,然后无限…

CentOS7 离线部署 PostgreSQL12

CentOS7 离线部署 PostgreSQL12下载资源包部署、启动配置服务创建用户及数据库下载资源包 下载地址 https://www.postgresql.org/download/选择系统 3. 拉到最下边点击direct download 4. 选择需要的版本 5. 点击Avaliable Groups下的链接 6. 下载postgresql*、postgresql*-…

基于android的共享单车系统

效果展示&#xff1a; 需求信息&#xff1a; 客户端&#xff1a; 1&#xff1a;登录注册&#xff1a;用户可以通过自己的信息进行账号的注册 2&#xff1a;附近单车&#xff1a;显示 附近的共享单车租赁点 3&#xff1a;单车开锁&#xff1a;扫码或者输入编号开锁 4&#xff1a…

简单DP+最长上升子序列

简单DP最长上升子序列 文章目录简单DP最长上升子序列比较简单的DP[1027. 方格取数](https://www.acwing.com/problem/content/1029/)题解[275. 传纸条](https://www.acwing.com/problem/content/277/)题解最长上升子序列[AcWing1014. 登山](https://www.acwing.com/problem/con…

20.Django大型电商项目之登录页面、如何使用图片验证码

1. 登录页面 1.1 基础搭建 templates <!-- netshop\userapp\templates\userapp\login.html --> {% extends base.html %} {% block title %}用户登录页面{% endblock %}{% load static %} {% block headerjs %} <script type"text/javascript" src"…

Allegro打散Group的两种方法操作指导

Allegro打散Group的两种方法操作指导 Allegro可以建一个Group,也可以打散一个Group,当不需要器件,过孔走线等等以一个group形式体现,可以用下面的操作打散,具体操作如下 举例需要将这个Group打散 选择setup-application Mode-placement edit模式 Find选择Groups 鼠标移…

基于Geehy APM32F4移植使用letter-shell命令行终端

1. letter-shell简介 letter shell是一个C语言编写的&#xff0c;可以嵌入在程序中的嵌入式shell&#xff0c;主要面向嵌入式设备。 说得直白点他就是一个命令行交互软件&#xff0c;可以读取用户输入的命令&#xff0c;找到并执行命令对应的函数。 letter-shell的功能十分强…