测试订正
生成括号
题目描述
王五是一名数学专业的同学,在课余选修了 C + + C++ C++编程课,现在他能够自己写程序判断判断一个给定的由 ′ ( ′ '(' ′(′和 ′ ) ′ ')' ′)′组成的字符串是否是正确匹配的。可是他不满足于此,想反其道而行之,设计一个程序,能够生成所有合法的括号组合,请你帮助他解决这个问题。
输入格式
输入只有一行N,代表生成括号的对数 ( 1 ≤ N ≤ 12 ) (1 ≤ N ≤ 12) (1≤N≤12)。
输出格式
输出所有可能的并且有效的括号组合,按照字典序进行排列,每个组合占一行。
样例 #1
样例输入 #1
3
样例输出 #1
((()))
(()())
(())()
()(())
()()()
代码
#include <bits/stdc++.h>
using namespace std;
int N;
bool judge(bitset<20>temp) {
int j = 0, num1 = 0;
while (j < 2*N) {
if (temp[j]) {
j++;
num1++;
} else {
j++;
num1--;
}
if (num1 < 0) {
return false;
}
}
return true;
}
int main() {
cin >> N;
int max = 1 << (2*N - 1);
for (int i = 1; i < max; i++) {
bitset<20> temp;
int cnt0 = 0, cnt1 = 0;
for (int j = 0; j < 2 * N; j++) {
temp[j] = (i >> j) & 1;
if (temp[j])
cnt1++;
else
cnt0++;
}
if (cnt1 != cnt0)
continue;
if (judge(temp)) {
for (int j = 0; j < 2 * N; j++) {
if (temp[2 * N - 1 - j])
cout << ")";
else cout << "(";
}
cout << "\n";
}
}
}
装箱问题
题目描述
有一个箱子容量为 V V V,同时有 n n n 个物品,每个物品有一个体积。
现在从 n n n 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。
输入格式
第一行共一个整数 V V V,表示箱子容量。
第二行共一个整数 n n n,表示物品总数。
接下来 n n n 行,每行有一个正整数,表示第 i i i 个物品的体积。
输出格式
- 共一行一个整数,表示箱子最小剩余空间。
样例 #1
样例输入 #1
24
6
8
3
12
7
9
7
样例输出 #1
0
提示
对于 100 % 100\% 100% 数据,满足 0 < n ≤ 30 0<n \le 30 0<n≤30, 1 ≤ V ≤ 20000 1 \le V \le 20000 1≤V≤20000。
代码
#include<bits/stdc++.h>
using namespace std;
int a[50],b[20005];
int main()
{
int V,n,i,j;
cin>>V>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(i=1;i<=n;i++)
{
for(j=V;j>=a[i];j--)
{
b[j]=max(b[j],b[j-a[i]]+a[i]);
}
}
cout<<V-b[V];
return 0;
}
数字组合
题目描述
有 n n n个正整数,找出其中和为 t t t( t t t也是正整数)的可能的组合方式。如: n = 5 , 5 n=5,5 n=5,5个数分别为 1 , 2 , 3 , 4 , 5 , t = 5 1,2,3,4,5,t=5 1,2,3,4,5,t=5,那么可能的组合有 5 = 1 + 4 5=1+4 5=1+4和 5 = 2 + 3 5=2+3 5=2+3和 5 = 5 5=5 5=5三种组合方式。
输入格式
输入的第一行是两个正整数 n n n和 t t t,用空格隔开,其中 1 < = n < = 20 1<=n<=20 1<=n<=20,表示正整数的个数, t t t为要求的和 ( 1 < = t < = 1000 ) (1<=t<=1000) (1<=t<=1000) 接下来的一行是 n n n个正整数,用空格隔开。
输出格式
和为 t t t的不同的组合方式的数目。
样例 #1
样例输入 #1
5 5
1 2 3 4 5
样例输出 #1
3
代码
#include<bits/stdc++.h>
using namespace std;
int a[1000],b[1000];
int main() {
int m, n;
cin>>m>>n;
for (int i = 1; i <= m; i++) {
cin>>a[i];
}
b[0] = 1;
for (int i = 1; i <= m; i++) {
for (int j = n; j >= a[i]; j--) {
b[j] += b[j - a[i]];
}
}
cout<<b[n];
return 0;
}
新新口诀表
题目描述
Aya 在背乘法口诀表。但是 Aya 在背的是一种很新的乘法口诀表。
具体而言,他背诵的是 P进制的乘法口诀表。这样的乘法口诀表一共有 P − 1 P − 1 P−1 行,第 i i i 行有 i i i 列,第 j j j 列表示$ i\times j$ 的情况。每一列以空格隔开。乘法口诀表中的运算都在 P进制下进行。例如下图是 P = 4 P = 4 P=4的情况。
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
Aya 给了你 P,请你输出 P进制下的乘法表。
输入格式
输入一个正整数 P。
输出格式
输出 P PP 进制下的乘法表。P进制中大于等于 10 的数字用大写字母$ A、B、C、⋯ \cdots$表示。
例如: 12 ∗ 11 = 132 12*11=132 12∗11=132 在 15进制下表示为 C ∗ B = 8 C C*B=8C C∗B=8C 。
样例 #1
样例输入 #1
4
样例输出 #1
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
样例 #2
样例输入 #2
12
样例输出 #2
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=10 4*4=14
5*1=5 5*2=A 5*3=13 5*4=18 5*5=21
6*1=6 6*2=10 6*3=16 6*4=20 6*5=26 6*6=30
7*1=7 7*2=12 7*3=19 7*4=24 7*5=2B 7*6=36 7*7=41
8*1=8 8*2=14 8*3=20 8*4=28 8*5=34 8*6=40 8*7=48 8*8=54
9*1=9 9*2=16 9*3=23 9*4=30 9*5=39 9*6=46 9*7=53 9*8=60 9*9=69
A*1=A A*2=18 A*3=26 A*4=34 A*5=42 A*6=50 A*7=5A A*8=68 A*9=76 A*A=84
B*1=B B*2=1A B*3=29 B*4=38 B*5=47 B*6=56 B*7=65 B*8=74 B*9=83 B*A=92 B*B=A1
提示
对于所有数据, 2 ≤ P ≤ 36 2 ≤ P ≤ 36 2≤P≤36。
代码
#include <bits/stdc++.h>
using namespace std;
char jz[38] {
'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z'
};
void zh(int n,int P) {
if(n<P) {
cout<<jz[n];
return;
}
zh(n/P,P);
cout<<jz[n%P];
}
void print(int a,int b,int P) {
printf("%c*%c=",jz[a],jz[b]);
int sum=a*b;
zh(sum,P);
}
int main() {
int P;
cin>>P;
for(int i=1; i<=P-1; i++) {
for(int j=1; j<=i; j++) {
print(i,j,P);
cout<<" ";
}
cout<<endl;
}
return 0;
}
数砖数
题目描述
给定一种 2 × 2 2×2 2×2 规格的瓷砖,该瓷砖的式样为
##
.#
用这种瓷砖,从平面的左上角出发,将整个平面铺满,形如:
################
.#.#.#.#.#.#.#.#
################
.#.#.#.#.#.#.#.#
################
.#.#.#.#.#.#.#.#
################
.#.#.#.#.#.#.#.#
给定两个整数 n n n 与 m m m,请计算从左上角开始的 n n n 行 m m m 列的区域中,有多少格子是 #。
输入格式
第一行:单个整数表示 n n n
第二行:单个整数表示 m m m
输出格式
单个整数表示 # 格子的数量。
样例 #1
样例输入 #1
4
4
样例输出 #1
12
提示
30% 的数据, 1 ≤ n , m ≤ 100 1≤n,m≤100 1≤n,m≤100
60% 的数据, 1 ≤ n , m ≤ 1000 1≤n,m≤1000 1≤n,m≤1000
100% 的数据, 1 ≤ n , m ≤ 10000 1≤n,m≤10000 1≤n,m≤10000
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int sum=0,n,m;
cin>>n>>m;
sum=(n+1)/2*m+(n/2)*(m/2);
cout<<sum;
return 0;
}
每次测试后要及时订正哦!
标签:2024.1,12,输出,int,样例,c++,27,格式,输入 From: https://blog.csdn.net/cmh20120102/article/details/137474757