0
点赞
收藏
分享

微信扫一扫

java的try-with-resource处理机制

迪莉娅1979 04-09 22:30 阅读 2

测试订正

生成括号

题目描述

王五是一名数学专业的同学,在课余选修了 C + + C++ C++编程课,现在他能够自己写程序判断判断一个给定的由 ′ ( ′ '(' ( ′ ) ′ ')' )组成的字符串是否是正确匹配的。可是他不满足于此,想反其道而行之,设计一个程序,能够生成所有合法的括号组合,请你帮助他解决这个问题。

输入格式

输入只有一行N,代表生成括号的对数 ( 1 ≤ N ≤ 12 ) (1 ≤ N ≤ 12) 1N12)

输出格式

输出所有可能的并且有效的括号组合,按照字典序进行排列,每个组合占一行。

样例 #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<n30 1 ≤ V ≤ 20000 1 \le V \le 20000 1V20000

代码

#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 P1 行,第 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 1211=132 在 15进制下表示为 C ∗ B = 8 C C*B=8C CB=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 2P36

代码

#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 1n,m100

60% 的数据, 1 ≤ n , m ≤ 1000 1≤n,m≤1000 1n,m1000

100% 的数据, 1 ≤ n , m ≤ 10000 1≤n,m≤10000 1n,m10000

代码

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

每次测试后要及时订正哦!

举报

相关推荐

0 条评论