华为OD笔试

题一

给出数字k,请输出所有结果小于k的整数组合到一起的最小交换次数。  组合一起是指满足条件的数字相邻,不要求相邻后在数组中的位置。 数据范围 -100 <= k <= 100 -100 <= 数组中的值 <= 100  样例输入1第一行输入数据:1 3 1 4 0 第二行输入k数值:2 输出 1   样例输入2第一行输入数据:0 0 1 0 第二行输入k数值:2 输出 0   样例输入3第一行输入数据:2 3 2 第二行输入k数值:1 输出 0
题二

某计费表有故障,凡任意数字位置遇到数字4就直接跳过

例如23->25 39->50 399->500 输入一个数代表计费表的度数,输出一个数代表实际读数   样例输入1输入:5 输出:4   样例输入2输入:17 输出:15   样例输入3输入:100 输出:81 
求大佬提供解题思路以及输入模式
#华为笔试##春招##笔试题目##实习#
全部评论
第一题快排
1 回复 分享
发布于 2022-05-18 22:19
华为机试真题 https://www.nowcoder.com/discuss/952553
点赞 回复 分享
发布于 2022-06-17 23:26
请问这个笔试是核心代码模式还是ACM模式啊?
点赞 回复 分享
发布于 2022-05-26 10:30
再来一份C++的: #include <iostream> using namespace std;   int main(){     int N = 0, i = 0, ans = 0, times = 1;     cin >> N;     if(N == 0){cout << 0 << endl;return 0;}     while(N != 0){     i = N % 10;     N = N / 10;     if(N == 0 && i < 4){ans = ans + (i * times);break;}     if(i != 0 && i > 4)ans = ans + ((i - 1) * times);     if(i != 0 && i < 4)ans = ans + (i * times);     times = times * 9;     }     cout << ans << endl;     return 0; }
点赞 回复 分享
发布于 2022-05-24 16:10
满分代码: import sys if __name__ == "__main__":     n = sys.stdin.readline().strip()     dp = [0]     k = 1     for i in range(1, len(n)):         dp.append(dp[i - 1] * 9 + k)         k = k * 10     discount = 0     j,k = 0, 1     i = len(n) - 1     while i >= 0:         tmp = int(n[i])         if tmp > 4:             tmp -= 1             discount += k         discount += tmp * dp[j]         j += 1         k *= 10         i -= 1     print(int(n) - discount)
点赞 回复 分享
发布于 2022-05-24 16:09
第一题滑动窗口,详见Leetcode 1151,这里把小于k的看作1,大于等于k的看作零。我也遇到这个题了,我输入的时候使用while(cin >> x){num.push_back(x);}  int k = num[num.size()-1]; 接着滑动窗口跑数组的时候记住数组的长度到num.size()-1,就行。 第二题 正常读入一个数字n就行,for循环i=1到n 判断每一个i是否符合,res++即可。
点赞 回复 分享
发布于 2022-05-20 14:29

相关推荐

Clavoss:一眼AI,死亏
点赞 评论 收藏
分享
评论
6
20
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务