当前位置: 首页 > news >正文

网站建设网网站建设全网营销客户资源

网站建设网,网站建设全网营销客户资源,wordpress调用外部样式表,苏州创建网站作者:匿名者Unit 专栏: 《C语言刷题》 目录题目精选6-7 统计某类完全平方数6-9 统计个位数字6-10 阶乘计算升级版6-11 求自定类型元素序列的中位数题目精选 6-7 统计某类完全平方数 我们先看一下题目要求: 根据题目给出的要求&#xff1a…

作者:@匿名者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记录各个位上的数字,全初始化为0num[0] = 1;                   //个位初始化为1int 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) {          //拓展结果的总位数记录进位的数,直到进位为0num[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]);}elsereturn A[(N + 1) / 2 - 1];
}

感谢阅读,共同进步
http://www.dtcms.com/a/552853.html

相关文章:

  • Python 数据可视化:用 Matplotlib 绘制多维度对比图表
  • 【axf文件解析与J-Link通讯实战(五)】PySide6图形界面与数据可视化集成
  • Android 权限管理:适配 Android 14 运行时权限申请(含后台定位)
  • 涡阳网站优化wordpress进入后台空白
  • 【实战案例】火语言 RPA 采集小说站已完结书名(自动翻页判断),保存到Excel 全流程(附完整脚本)
  • 基于微信小程序的背单词系统x1o5sz72(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 力扣hot100-------11、盛最多水的容器(java版)
  • Visual Basic 菜单编辑器
  • 本地部署轻量级持续集成工具 Drone CI 并实现外部访问
  • gitlab-ci中cicd+helm实现devops自动化部署到k8s
  • 网站欢迎页面怎么做江门建站公司模板
  • 评论回复网站怎么做郑州百度搜索优化
  • Rust开发之使用derive宏自动实现Trait(Clone、Debug)
  • 15. setState的更新是异步的吗
  • Qwen2.5-VL开源,斩获多榜单冠军!
  • Prometheus和Grafana简介
  • 基于深度学习的医疗器械分类编码映射系统:设计篇
  • Rust开发之自定义错误类型(实现Error trait)
  • 【Java Web学习 | 第三篇】CSS(2) - 元素显示模式
  • 10月31日
  • Mybatis-Plus实现MySQL分表
  • 兵团住房和城乡建设局网站网站设计标杆企业
  • 快充新标杆:AVS 协议如何重塑手机充电体验
  • LIUNX 与手机安卓的文件互传 的常用方法
  • 第一届数证杯做题笔记(流量分析和手机取证)
  • 【IO多路转接】深入解析 poll:从接口到服务器实现
  • 【Spring Boot】Spring Boot解决循环依赖
  • 网站开发发展趋势2018网上建立网站赚钱
  • SuperMap Hi-Fi 3D SDK for Unreal 使用蓝图接口加载多源数据
  • 【Java】如何使用jdbc连接并操作MySQL,一文读