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;
}