每日一练--IT冷知识C/C++--第八天
目录
讽刺的名字
Unix 诞生
RISC-V 的掌门人
计算出现次数最多的整数及其出现次数
字符串相乘
找x
讽刺的名字
Symantec 公司曾发布一款个人信息安全产品 Norton Antivirus,也便是大名鼎鼎的诺顿杀毒;在美国,诺顿是市场占有率第一的杀毒软件。但事实上,诺顿杀毒软件的名字却来源于一个不相信电脑病毒存在的程序员,这个程序员曾出版《计算机概论》,为计算机的发展带来了许多贡献。
这位程序员的名字叫什么?
A | 詹姆·诺顿(Jame Norton) |
B | 彼得·诺顿(Peter Norton) |
C | 玛丽·诺顿(Mary Norton) |
D | 爱德华·诺顿(Edward Norton) |
答案:彼得·诺顿(Peter Norton)
Unix 诞生
Unix 是一个多任务、多用户的计算机操作系统家族,前身为 1964 年启动的 Multics;由于 Multics 项目缓慢,1969 年贝尔实验室退出项目,由三名程序员完成了对其衍生作品 Unix 的自研。Unix 直接影响了如今流行的所有操作系统。
以下哪一位程序员没有参与开发 Unix?
A | 肯·汤普森 |
B | 道格拉斯·麦克罗伊 |
C | 蒂姆·伯纳斯·李 |
D | 丹尼斯·里奇 |
答案:蒂姆·伯纳斯·李
RISC-V 的掌门人
RISC-V 是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),简单解释为开源软件运动相对应的一种“开源硬件”;如今 RISC-V 基金会的创始人在广东的清华-伯克利深圳学院(TBSI)建立了 RISC-V 的国际开源实验室,而这个人也是 2017 年的图灵奖得主。
这个人是谁?
A | 唐纳德·克努特(Donald ErvinKnuth) |
B | 约翰·巴克斯(John Backus) |
C | 约翰·轩尼诗(John Hennessy) |
D | 大卫·帕特森(David Patterson) |
答案:大卫·帕特森(David Patterson)
计算出现次数最多的整数及其出现次数
【问题描述】 输入一组无序的整数,编程输出其中出现次数最多的整数及其出现次数。
【输入形式】
先从标准输入读入整数的个数(大于等于1,小于等于100),然后在下一行输入这些整数,各整数之间以一个空格分隔。
【输出形式】
在标准输出上输出出现次数最多的整数及其出现次数,两者以一个空格分隔;若出现次数最多的整数有多个,则按照整数升序分行输出。
【样例输入】
10
0 -50 0 632 5813 -50 9 -50 0 632
【样例输出】
-50 3
0 3
【样例说明】
输入了10个整数,其中出现次数最多的是-50和0,都是出现3次。
以下程序实现了这一功能,请你填补空白处的内容:
#include <stdio.h>
int main()
{
int a[50], b[50], c[50], n, i, j, t, max;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
for (i = 1; i < n; i++)
for (j = 0; j < n - 1; j++)
{
if (a[j] > a[j + 1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
j = 0;
t = -1;
for (i = 0; i < n - 1; i++)
{
____________________;
}
b[j] = n - 1 - t;
c[j] = n - 1;
max = b[0];
for (i = 1; i <= j; i++)
{
if (max < b[i])
{
max = b[i];
}
}
for (i = 0; i <= j; i++)
if (b[i] == max)
{
t = c[i];
printf("%d %d\n", a[t], b[i]);
}
return 0;
}
A | if (a[i] != a[i + 1]) { b[j] = i + t; c[j] = i + 1; t = i; j++; } |
B | if (a[i] != a[i + 1]) { b[j] = i + t; c[j] = i - 1; t = i; j++; } |
C | if (a[i] != a[i + 1]) { b[j] = i + t; c[j] = i; t = i; j++; } |
D | if (a[i] != a[i + 1]) { b[j] = i - t; c[j] = i; t = i; j++; } |
答案:
if (a[i] != a[i + 1])
{
b[j] = i - t;
c[j] = i;
t = i;
j++;
}
字符串相乘
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3" 输出: "6"
示例 2:
输入: num1 = "123", num2 = "456" 输出: "56088"
说明:
num1
和num2
的长度小于110。num1
和num2
只包含数字0-9
。num1
和num2
均不以零开头,除非是数字 0 本身。- 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
以下程序实现了这一功能,请你填补空白处内容:
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
string multiply(string num1, string num2)
{
string res(num1.length() + num2.length(), '0');
for (int i = num2.length() - 1; i >= 0; i--)
{
int j, carry = 0;
for (j = num1.length() - 1; j >= 0; j--)
{
_____________________;
}
res[i + j + 1] = carry + '0';
}
int i;
for (i = 0; i < res.length() - 1; i++)
{
if (res[i] != '0')
{
break;
}
}
return res.substr(i);
}
};
A | carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j + 1] - '0'); res[i + j + 1] = carry % 10 + '0'; carry /= 10; |
B | carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j - 1] - '0'); res[i + j - 1] = carry % 10 + '0'; carry %= 10; |
C | carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j] - '0'); res[i + j] = carry % 10 + '0'; carry %= 10; |
D | carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j] - '0'); res[i + j] = carry % 10 + '0'; carry /= 10; |
答案:
carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j + 1] - '0');
res[i + j + 1] = carry % 10 + '0';
carry /= 10;
找x
题目描述
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出
对于每组输入,请输出结果。
样例输入
4
1 2 3 4
3
样例输出
2
以下程序实现了这一功能,请你填补空白处的内容:
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int *ptr = new (nothrow) int[n];
for (auto i = 0; i < n; i++)
{
cin >> ptr[i];
}
int x = 0;
cin >> x;
auto j = 0;
auto status = 0;
for (; j < n; ++j)
{
______________;
}
if (status == 0)
{
j = -1;
}
cout << j << endl;
delete[] ptr;
cin.get();
cin.get();
return 0;
}
A | if (ptr[j] <= x) { status = 1; continue; } |
B | if (ptr[j] == x) { status = 1; continue; } |
C | if (ptr[j] == x) { status = 1; break; } |
D | if (ptr[j] >= x) { status = 1; continue; } |
答案:
if (ptr[j] == x)
{
status = 1;
break;
}