提交 4a74c7a3 编写于 作者: 每日一练社区's avatar 每日一练社区

add exercises

上级 9cf44ac3
## 标题
找最值
## 题目描述
输入A、B、C三组数,每组三个数,选取每组中最大的数并输出所对应的字符(A\B\C),并输出每组中最大的数```a1, a2, a3```
#### 输入格式:
输入三行三列,每列代表一组数,每组三个数
#### 输出格式:
输出每组中最大的数以及组号,组号与最大的数之间用空格隔开,结果保留小数点后两位
#### 输入
```
1.1 2.5 1.7
1.2 3.1 1.6
4.1 1.2 1.1
```
#### 输出
\ No newline at end of file
```
B 2.50 B 3.10 A 4.10
```
\ No newline at end of file
#include <iostream>
#include <string>
using namespace std;
int main()
{
float n, max[3] = {-1};
int pos[3];
string s[3] = {"W", "T", "L"};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
cin >> n;
if (n > max[i])
{
max[i] = n;
pos[i] = j;
}
}
}
float res;
res = (max[0] * max[1] * max[2] * 0.65 - 1) * 2;
for (int i = 0; i < 3; i++)
{
cout << s[pos[i]] << " ";
}
printf("%.2f", res);
return 0;
}
## 标题
多项式相加
## 题目描述
给定两个多项式的信息,让我们求两个多项式相加的结果。每一个多项式输入一行,第一个数字是多项式的项数 后面每两个数据一组为一个项,分别是指数和系数。 输入的数据按照**指数递减**的顺序。
多项式A: $2.1*x^3 + 1.0*x^2$
多项式B: $0.0*x^3 + 0.1*x^2$
将两式相加得到 $2.1*x^3 + 1.1*x^2$
#### 输入
```
2 3 2.1 2 1.0
2 3 0.0 2 0.1
```
#### 输入解释
```
第一行第一个数字 2 ,表示两项:3*2.1 + 2*1.0
第一行第一个数字 2 ,表示两项:3*0.0 + 2*0.1
```
$$
第一行第一个数字 2 ,表示两项:2.1*x^3 + 1.0*x^2
$$
$$
第二行第一个数字 2 ,表示两项:0.0*x^3 + 0.1*x^2
$$
#### 输出
```
2 3 2.1 2 1.1
#### 输出解释
```
第一行第一个数字 2 ,表示两项:3*(2.1 + 0.0) + 2*(1.0 + 0.1)
合并后:3*2.1 + 2*1.1
```
\ No newline at end of file
#### 输出解释
上面两项相加的结果:
$$第一个数字 2 ,表示两项:2.1*x^3 + 1.1*x^2$$
\ No newline at end of file
## 标题
求每一层叶子节点的个数
DFS简单运用
## 题目描述
输入一个值表示树中节点总数,另一个数表示非叶节点总数,接下来就是输入树的层次结构。要求判断出每一层有多少个叶节点并且输出
给定整数$a_1,a_2.....a_n$,判断是否可以从中选出若干数,使他们的和恰好为k。
#### 输入
```
2 1
01 1 02
4
1 2 4 7
13
```
#### 输入解释
每个输入文件包含一个测试用例。每一种情况都以包含0 < N < 100(树中的节点数)和M (< N)(非叶节点数)的行开始。接下来是M行,每一行的格式如下:
```
ID K ID[1] ID[2] ... ID[K]
```
其中ID是一个两位数,表示给定的非叶节点,K是它的子节点的编号,后面是它的子节点的两位数ID序列。为了简单起见,让我们将根ID修改为01。
第一行输入n,表示总共n个数
第二行输入每个数
第三行输入k
#### 输出
```
0 1
Yes
```
#### 输出解释
对于每个测试用例,您都应该从根开始计算没有孩子的家庭成员。数字必须在一行中打印,用空格隔开,并且在每行的末尾不能有额外的空格。
示例示例表示一棵只有2个节点的树,其中01是根节点,02是唯一的子节点。因此在根01层上,有0个叶节点;下一层,有1个叶节点。然后我们应该在一行中输出“0 1”。
\ No newline at end of file
若存在,则输出Yes
反之,输出No
\ No newline at end of file
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int e[300], h[300], nex[300];
int idx;
int cnt[300], mx_dep;
void add(int u, int v)
{
e[idx] = v, nex[idx] = h[u], h[u] = idx++;
}
void dfs(int u, int dep)
{
if (h[u] == -1) //叶子结点
{
cnt[dep]++;
mx_dep = max(mx_dep, dep);
return;
}
for (int i = h[u]; ~i; i = nex[i])
dfs(e[i], dep + 1);
}
int main()
#define MAX_N 1005
int data[MAX_N];
int n, k;
// 从前i项得到的和sum
bool DFS(int i, int sum)
{
int n, m;
cin >> n >> m;
memset(h, -1, sizeof h);
for (int i = 0; i < m; i++)
{
int id, k;
cin >> id >> k;
while (k--)
{
int b;
cin >> b;
add(id, b);
}
}
dfs(1, 0);
cout << cnt[0];
for (int i = 1; i <= mx_dep; i++)
cout << ' ' << cnt[i];
// n项都计算过了,判断是否等于k
if (i == n)
return sum == k;
// 不加上第i项
if (DFS(i + 1, sum))
return true;
// 加上第i项
if (DFS(i + 1, sum + data[i]))
return true;
return 0;
}
return false;
}
\ No newline at end of file
......@@ -4,9 +4,9 @@
给一个 100 位以内的数,计算所有数字之和,并将结果的每一位用英文表示。
#### 输入
```
12345
666
```
#### 输出
```
one five
one eight
```
\ No newline at end of file
......@@ -5,11 +5,11 @@
#### 输入
```
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
zhangsan 09:00:28 17:30:10
lisi 08:00:00 18:30:25
wangmazi 12:00:00 22:58:40
```
#### 输出
```
SC3021234 CS301133
lisi wangmazi
```
\ No newline at end of file
## 标题
坐电梯
## 题目描述
电梯从0层开始,按照指定的顺序,依次停到各个楼层
每个楼层停5s,上升一层需要6s,下降一层需要4s
求总时间
#### 输入
```
1 4 3 1
```
#### 输出
\ No newline at end of file
```
29
```
\ No newline at end of file
#include <iostream>
using namespace std;
// 1008 Elevator (20)(20 point(s))
int main(void)
{
int n;
cin >> n;
int sum = 0, old = 0, t;
for (int i = 0; i < n; ++i)
{
cin >> t;
if (t - old > 0)
{ // up
sum += (t - old) * 6;
}
else
{
sum += (old - t) * 4;
}
sum += 5;
old = t;
}
cout << sum << endl;
return 0;
} // jinzheng 2018.7.24 11:03
\ No newline at end of file
## 标题
多项式乘法
## 题目描述
求多项式A与多项式B相乘的结果
多项式A: $2.4*x^1 + 3.2*x^0$
多项式B: $1.5*x^2 + 0.5*x^1$
求A*B
#### 输入
```
2 1 2.4 0 3.2
2 2 1.5 1 0.5
```
#### 输入解释
$$第一行的第一个数2,表示两项:2.4*x^1 + 3.2*x^0$$
$$第二行的第一个数2,表示两项:1.5*x^2 + 0.5*x^1$$
#### 输出
\ No newline at end of file
```
3 3 3.6 2 6.0 1 1.6
```
#### 输出解释
上面两项相乘的结果:
$$第一行的第一个数3,表示三项:3.6*x^3 + 6.0*x^2 + 1.6*x^1$$
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
double con[2][1001] = {0.0};
double ans[2002] = {0.0};
vector<int> exist;
int main()
{
int K, tmp1, mk;
double tmp2;
for (int i = 0; i < 2; i++)
{
scanf("%d", &K);
if (i == 1)
mk = exist.size() - 1;
for (int j = 0; j < K; j++)
{
scanf("%d", &tmp1);
scanf("%lf", &tmp2);
con[i][tmp1] = tmp2;
exist.push_back(tmp1);
}
}
int cnt = 0;
int sze = exist.size();
for (int i = 0; i <= mk; i++)
{
for (int j = mk + 1; j < sze; j++)
ans[exist[i] + exist[j]] += con[0][exist[i]] * con[1][exist[j]];
}
for (int k = 2000; k >= 0; k--)
{
if (ans[k] != 0)
cnt++;
}
printf("%d", cnt);
for (int k = 2000; k >= 0; k--)
{
if (ans[k] != 0)
printf(" %d %.1f", k, ans[k]);
}
return 0;
}
## 标题
二分查找
## 题目描述
利用二分查找法判断元素是否存在于有序数组中
给定有序数组``` int a[] = {1, 2, 3, 3, 5, 6}```;
#### 输入
#### 输出
#### 输入样例1:
```
3
```
#### 输出样例1:
```
1
```
#### 输入样例2:
```
7
```
#### 输出样例2:
```
-1
```
\ No newline at end of file
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int find_binary(int target, vector<int> &arr)
{
if (arr.empty())
return -1;
int low = 0;
int high = arr.size() - 1;
while (low <= high)
{
int middle = (low + high) / 2;
if (target == arr[middle])
return 1;
else if (target > arr[middle])
low = middle + 1;
else
high = middle - 1;
}
return -1;
}
int main()
{
int b;
int a[] = {1, 2, 3, 3, 5, 6};
int len = sizeof(a) / sizeof(int);
vector<int> arr(a, a + len);
std::sort(arr.begin(), arr.end());
vector<int>::iterator it;
scanf("%d", &b);
cout << find_binary(b, arr) << endl;
return 0;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册