每日一练--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;
}
Aif (a[i] != a[i + 1])
{
    b[j] = i + t;
    c[j] = i + 1;
    t = i;
    j++;
}
Bif (a[i] != a[i + 1])
{
    b[j] = i + t;
    c[j] = i - 1;
    t = i;
    j++;
}
Cif (a[i] != a[i + 1])
{
    b[j] = i + t;
    c[j] = i;
    t = i;
    j++;
}
Dif (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"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 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);
	}
};
Acarry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j + 1] - '0');
res[i + j + 1] = carry % 10 + '0';
carry /= 10;
Bcarry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j - 1] - '0');
res[i + j - 1] = carry % 10 + '0';
carry %= 10;
Ccarry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j] - '0');
res[i + j] = carry % 10 + '0';
carry %= 10;
Dcarry += (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;
}
Aif (ptr[j] <= x)
{
    status = 1;
    continue;
}
Bif (ptr[j] == x)
{
    status = 1;
    continue;
}
Cif (ptr[j] == x)
{
    status = 1;
    break;
}
Dif (ptr[j] >= x)
{
    status = 1;
    continue;
}

 答案:

if (ptr[j] == x)
{
	status = 1;
	break;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔子递归

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值