2023.2.22上机练习

1.百万富翁问题
热度指数:6401时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M

一个百万富翁遇到一个陌生人,陌生人找他谈了一个换钱的计划。该计划如下:我每天给你10 万元,你第一天给我1 分钱,第二天2 分钱,
第三天4 分钱……
这样交换 30 天后,百万富翁交出了多少钱?陌生人交出了多少钱?(注意一个是万元,一个是分)

输入描述:
该题没有输入

输出描述:
输出两个整数,分别代表百万富翁交出的钱和陌生人交出的钱,富翁交出的钱以万元作单位,陌生人交出的钱以分作单位。

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	int stranger = 30 * 10;
	int million = 0;
	for (int i = 0; i < 30; i++)
	{
		million += pow(2, i);
	}
	cout << stranger << " " << million;
}

2.字符串链接
题目
题解(2)
讨论(60)
排行
时间限制:1秒 空间限制:64M
知识点
字符串
warning 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
描述
不用strcat 函数,自己编写一个字符串链接函数MyStrcat(char dstStr[],charsrcStr[])
输入描述:
两个字符串,字符串由小写字母组成。
输出描述:
链接后的字符串
示例1
输入:
hello world
good morning

输出:
helloworld
goodmorning

//没写出MyStrcat(char dstStr[],charsrcStr[])函数,这样写可以运行成功,但我觉得好像不太符合题目要求,下面有正解。
#include <iostream>
#include <string>

int main() {
    using namespace std;
    string str1;
    string str2;
    while (cin >> str1 >> str2)
        cout << str1 + str2 << endl;
    return 0;
}
#include<iostream>
#include <string>
using namespace std;

void MyStrCat(char dstStr[], char scrStr[])
{
    int len1 = strlen(dstStr), len2 = strlen(scrStr), i;
    char s[len1 + len2];
    for (i = 0; i < len1; i++) s[i] = dstStr[i];
    for (i = 0; i < len2; i++) s[len1 + i] = scrStr[i];
    s[len1 + i] = '\0';
    cout << s << endl;
}
int main()
{
    char s1[100], s2[100];
    while (cin>>s1>>s2)
        MyStrCat(s1, s2);
    return 0;
}

3.链接:https://www.nowcoder.com/questionTerminal/ed6552d03e624ba58d16af6d57e1c3e9
来源:牛客网

计算两个矩阵的乘积
热度指数:8582时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M
算法知识视频讲解
计算两个矩阵的乘积,第一个是23,第二个是32

输入描述:
输入为两个矩阵,其中一个为23的矩阵,另一个为32的矩阵

输出描述:
一个2*2的矩阵(每一个数字后都跟一个空格)
示例1
输入
1 2 3
3 4 5
6 7
8 9
10 11
输出
52 58
100 112

#include<iostream>
using namespace std;
int main()
{
    int a[2][3], b[3][2], c[2][2] = { 0 }, i, j, k;
    //输入两个数组
    for (i = 0; i < 2; i++)
        for (j = 0; j < 3; j++)
            cin>>a[i][j];
    for (i = 0; i < 3; i++)
        for (j = 0; j < 2; j++)
            cin>>b[i][j];
    //两个数组相乘
    for (i = 0; i < 2; i++)//ik作为数组a//kj作为数组b//ij作为数组c
        for (j = 0; j < 2; j++)
            for (k = 0; k < 3; k++)
                c[i][j] += a[i][k] * b[k][j];
    //输出
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 2; j++)
            cout<<c[i][j]<<" ";
        cout << endl;
    }
}

4.📚Description:

自从可爱的小熊猫来到浙商大后便再也不想吃那些膳食纤维了,比如:竹子。所以,骞哥不得不帮助国宝寻找一些肉类来维持能量,使得小熊猫不至于饿死在全球某工商。但是,你知道的淘宝上有很多东西都是差不多的的,再然后呢

骞哥想让你帮助小熊猫找到有多少种不同的方法可以把肉食合并。

规则是这样的:

给你很多的1,相邻的两个1可以合并成2,也可以原封不动,比如给你1111你可以合并成1111,121,211,112,22。

现在就是你的任务了,请务必保护好骞哥的小熊猫。谢谢!

⏳Input:

第一行是一个数字n,接下来有n组测试数据,每行都由很多连续的1(不超过50个1)组成。

🔑Output:

输出包括n行,每行包含有多少种方法

👨‍🏫 Sample Input:
3
1
11
11111

💡Sample Output:
1
2
8

🙋‍思路

多用几组数据就可以找到规律:
1 —— 1
11——2
111——3
1111——5
11111——8

即:num[n] = num[n-1] + num[n-2]

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	long int num[51];
	num[1] = 1;
	num[2] = 2;
	for (int i = 3; i < 51; i++) 
	{
		num[i] = num[i - 1] + num[i - 2];
	}
	char str[51];
	while (n--) 
	{
		cin >> str;
		cout << num[strlen(str)] << endl;
	}
	return 0;
}

5.Description:
Bessie 处于半梦半醒的状态。过了一会儿,她意识到她好像在数羊,不能入睡。Bessie的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码:每一个数码在计数的过程中出现过多少次?
给出两个整数 M 和 N (1 <= M <= N <= 100,000 ),求每一个数码出现了多少次。
例如考虑序列 129…137: 129, 130, 131, 132, 133, 134, 135, 136, 137。统计后发现:
数码 0 1 2 3 4 5 6 7 8 9
次数 1 10 2 9 1 1 1 1 0 1
Input:
输入包含多组数据,每组数据有两个用空格分开的整数 M 和 N

Output:
对于每组数据,输出十个用空格分开的整数,分别表示数码(0…9)在序列中出现的次数。

Sample Input:
129 137
42 18510
Sample Output:
1 10 2 9 1 1 1 1 0 1
6497 16098 7587 7587 7595 7508 7497 7497 7008 6497

这道题我真服了,oj老是判定格式不对!!!!整不明白是为啥了,答案是对的
#include<iostream>
using namespace std;
int main()
{
	int m, n;
	while (cin >> m >> n)
	{
		int arr[10]={0};
		for (int i = m; i <= n; i++)
		{
			int temp = i;
			while (temp)
			{
				arr[temp % 10]++;
				temp = temp / 10;
			}
		}
		for (int i = 0; i < 10; i++)
			cout << arr[i] << " ";
		cout << endl;
	}
	return 0;
}

6.Description:
有一个长度为n的整数序列。请写一个程序,先把序列中的最小值与第一个数交换,再最大值与最后一个数交换。输出转换好的序列。

Input:
输入包括两行。 第一行为正整数n(1≤n≤10)。 第二行为n个正整数组成的序列。保证输入数据没有重复的数字。

Output:
输出转换好的序列。数据之间用空格隔开。

Sample Input:5
2 1 5 4 3
Sample Output:
1 2 3 4 5

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int num[11];
	for (int i = 0; i < n; i++)
		cin >> num[i];
	int max = -10000000, min = 100000, a, k;
	for (int i = 0; i < n; i++)
	{
		if (num[i] > max)
		{
			max = num[i];
			a = i;
		}
		if (num[i] < min)
		{
			min = num[i];
			k = i;
		}
	}
	int temp = num[0];
	num[0] = min;
	num[k] = temp;
	int temp1 = num[n - 1];
	num[n - 1] = max;
	num[a] = temp1;
	for (int i = 0; i < n; i++)
		cout << num[i] << " " ;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值