华为面试 C 语言问题 (2)
最编程
2024-04-19 18:49:38
...
网络异常,图片无法展示
|
习题一:质数因子
描述
- 功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
网络异常,图片无法展示
|
输入描述
- 输入一个整数
输出描述
- 按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
示例
输入: 180 输出: 2 2 3 3 5
- 点击进行在线练习,查看解析
代码实现
#include "stdio.h" int main() { long int n; scanf("%ld", &n); for (int i=2; i<=n; i++) { while (n%i == 0) { printf("%d ", i); n /= i; } } }
习题二:取近似值
描述
- 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。
- 数据范围:保证输入的数字在 32 位浮点数范围内
输入描述
- 输入一个正浮点数值
输出描述
- 输出该数值的近似整数值
示例1
输入: 2.499 输出: 2 说明: 0.499<0.5,2.499向下取整为2
- 点击进行在线练习,查看解析
代码实现
#include <stdio.h> int main(void) { double num; scanf("%lf",&num); printf("%d",(int)(num + 0.5)); return 0; }
习题三:合并表记录
描述
- 数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。
- 提示:
0 <= index <= 11111111
1 <= value <= 100000
输入描述
- 先输入键值对的个数n(1 <= n <= 500)
- 接下来n行每行输入成对的index和value值,以空格隔开
输出描述
- 输出合并后的键值对(多行)
示例
输入: 4 0 1 0 2 1 2 3 4 输出: 0 3 1 2 3 4
点击进行在线练习,查看解析
代码实现
#include<iostream> #include<map> using namespace std; int main() { int n; cin>>n; //输入键值对的个数 map<int, int> m; //使用map容器,自带键值对数据结构 map<int, int>::iterator it; //map类型的迭代器 for(int i=0;i<n;i++) { int a,b; cin>>a>>b; //每行输入一个键值对 it = m.find(a); //查找键a是否存在 if(it != m.end()) { //如果存在,对键相同的单元的值部分进行求和; m[a] = it->second + b; }else { //如果不存在生成新的键值对 m[a] = b; } } for(it=m.begin();it!=m.end();it++) { //遍历打印 cout<<it->first<<" "<<it->second<<endl; } return 0; }
习题四:提取不重复的整数
描述
- 输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
- 保证输入的整数最后一位不是 0 。
输入描述
- 输入一个int型整数
输出描述
- 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例
输入: 9876673 输出: 37689
- 点击进行在线练习,查看解析
代码实现
#include <stdio.h> int main(void) { int data = 0; scanf("%d", &data); int map[10] = {0}; while (data != 0) { // 判断是否处理了最高位 int temp = data%10; if (map[temp] == 0) { // 判断这一位 是否已经出现过 map[temp]++; printf("%d", temp); } data = data/10; // 个位 -> 十位 -> 百位 } return 0; }
习题五:字符个数统计
描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。
数据范围: 1≤n≤500
输入描述
输入一行没有空格的字符串。
输出描述
输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。
示例1
输入: abc 输出: 3
代码实现
#include <stdio.h> #include <string.h> #include <stdlib.h> int num=0,len,i,j,k,asc; int tmp[128]={0}; char str[400]; int main() { gets(str); len=strlen(str); for(i=0;i<len;i++) { asc=(int)str[i]; if(tmp[asc]==0) { tmp[asc]=1; num++; } } printf("%d",num); return 0; }
上一篇: 华为数据库工程师面试问题
下一篇: 华为秋季招聘面试经验分享!
推荐阅读
-
用 C 语言解决遭遇问题
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
一气之下,我只用一行代码就解决了约瑟夫环问题,面试官一头雾水_约瑟夫问题 c 语言(1)
-
[C++][算法基础]不相交区间的最大数目(贪婪 +区间问题 2)
-
正负偏差变量 即 d2+、d2- 分别表示决策值中超出和未达到目标值的部分。而 di+、di- 均大于 0 刚性约束和目标约束(柔性目标约束有偏差) 在多目标规划中,>=/<= 在刚性约束中保持不变。当需要将约束条件转换为柔性约束条件时,需要将 >=/<= 更改为 =(因为已经有 d2+、d2- 用来表示正负偏差),并附加上 (+dii-di+) 注意这里是 +di、-di+!之所以是 +di,-di+,是因为需要将目标还原为最接近的原始刚性约束条件 优先级因素和权重因素 对多个目标进行优先排序和优先排序 目标规划的目标函数 是所有偏差变量的加权和。值得注意的是,这个加权和都取最小值。而 di+ 和 dii- 并不一定要出现在每个不同的需求层次中。具体分析需要具体问题具体分析 下面是一个例子: 题目中说设备 B 既要求充分利用,又要求尽可能不加班,那么列出的时间计量表达式即为:min z = P3 (d3- + d3 +) 使用 + 而不是 -d3 + 的原因是:正负偏差不可能同时存在,必须有 di+di=0 (因为判定值不可能同时大于目标值和小于目标值),而前面是 min,所以只要取 + 并让 di+ 和 dii- 都为正值即可。因此,得出以下规则: 最后,给出示例和相应的解法: 问题:某企业生产 A 和 B 两种产品,需要使用 A、B、C 三种设备。下表显示了与工时和设备使用限制有关的产品利润率。问该企业应如何组织生产以实现下列目标? (1) 力争利润目标不低于 1 500 美元; (2) 考虑到市场需求,A、B 两种产品的生产比例应尽量保持在 1:2; (3)设备 A 是贵重设备,严禁超时使用; (4)设备 C 可以适当加班,但要控制;设备 B 要求充分利用,但尽量不加班。 从重要性来看,设备 B 的重要性是设备 C 的三倍。 建立相应的目标规划模型并求解。 解:设企业生产 A、B 两种产品的件数分别为 x1、x2,并建立相应的目标计划模型: 以下为顺序求解法,利用 LINGO 求解: 1 级目标: 模型。 设置。 variable/1..2/:x;! s_con_num/1...4/:g,dplus,dminus;!所需软约束数量(g=dplus=dminus 数量)及相关参数; s_con(s_con_num);! s_con(s_con_num,variable):c;!软约束系数; 结束集 数据。 g=1500 0 16 15. c=200 300 2 -1 4 0 0 5; 结束数据 min=dminus(1);!第一个目标函数;!对应于 min=z 的第一小部分;! 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); !使用设置完成的数据构建软约束表达式; ! !软约束表达式 @for(variable:@gin(x)); !将变量约束为整数; ! 结束 此时,第一级目标的最优值为 0,第一级偏差为 0: 第二级目标: !求 dminus(1)=0,然后求解第二级目标。 模型。 设置。 变量/1..2/:x;!设置:变量/1..2/:x; ! s_con_num/1...4/:g,dplus,dminus;!软约束数量及相关参数; s_con(s_con_num(s_con_num));! s_con(s_con_num,variable):c;! 软约束系数; s_con(s_con_num,variable):c;! 结束集 数据。 g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; 结束数据 min=dminus(2)+dplus(2);!第二个目标函数 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); ! 软约束表达式;! dminus(1)=0; !第一个目标结果 @for(variable:@gin(x)); ! 结束 此时,第二个目标的最优值为 0,偏差为 0: 第三目标 !求 dminus(2)=0,然后求解第三个目标。 模型。 设置。 变量/1..2/:x;!设置:变量/1..2/:x; ! s_con_num/1...4/:g,dplus,dminus;!软约束数量及相关参数; s_con(s_con_num(s_con_num));! s_con(s_con_num,variable):c;! 软约束系数; s_con(s_con_num,variable):c;! 结束集 数据。 g=1500 0 16 15; c=200 300 2 -1 4 0 0 5; 结束数据 min=3*dminus(3)+3*dplus(3)+dminus(4);!第三个目标函数。 2*x(1)+2*x(2)<12;!硬约束 @for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); ! 软约束表达式;! dminus(1)=0; !第一个目标约束条件; ! dminus(2)+dplus(2)=0; !第二个目标约束条件 @for(variable:@gin(x));! 结束 最终结果为 x1=2,x2=4,dplus(1)=100,最优利润为
-
详细解释 C 语言中的 printf 缓冲区问题
-
2.资料下载:C 语言学习
-
从 0 开始学习 C 语言 第 2 天教程(结束,两天内学会 C 语言)
-
超级完整的 C 语言高效编程和代码优化方法 (2) 仅为专家所知
-
华为面试传奇问题(8 分钟写代码)