暴力枚举

方程的解

结果填空题目,仅需回答答案即可。不要填写代码。

方程:$a^{2}+b^{2}+c^{2}=1000$,其中 $a<b<c$。我们知道这个方程有两组正整数解,其中 $a,b,c=6,8,30$ 就是一组解。你能算出另一组整数解吗?

注意:顺序输出 $a$,$b$,$c$ 的三个正整数,中间用空格分开,不要填写任何多余的内容或说明性文字,行末不要换行

回答区域输入:

10 18 24

原始代码

#include <iostream>
#include <stdio.h>

using namespace std;
int main()
{
	int a = 1;
	int b = 2;
	int c = 3;
	
	for(a = 1; a <= 32; a++){
		for(b = 2; b <= 32; b++){
			for(c = 3; c <= 32; c++){
				if(a < b && b < c){
					if(a*a + b*b + c*c == 1000){
						if(a != 6 && a != 8 && c != 30){
							printf("%d %d %d", a, b, c);
						}
					}
				}
			}
		}
	}
	
	return 0;
 }  

最大子阵

使用代码实现题目解答。编译器限时 1000 ms,内存限制为 131072 KB。

给定一个 $n\times m$ 的矩阵 $A$,求 $A$ 中的一个非空子矩阵,使这个子矩阵中的元素和最大。其中 $A$ 的子矩阵指在 $A$ 中行和列均连续的一部分。

输入格式

输入的第一行包括两个整数 $n, m (1\leqslant n,m\leqslant 50)$,分别表示矩阵 $A$ 的行数和列数。接下来的 $n$ 行,每行 $m$ 个整数,表示矩阵 $A_{i,j}(-1000\leqslant A_{i,j}\leqslant 1000)$。

输出格式

输出一行,包含一个整数,表示 $A$ 中最大的子矩阵中的元素和。

样例输入

3 3
2 -4 1
-1 2 1
4 -2 2

样例输出

6

回答区域输入:

#include <iostream>
#include <algorithm> 

using namespace std;
int main()
{
	int n, m;
	int A[50][50];
	int maxi = -1000;
	int sum = 0;
	
	cin >> n >> m;
	
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			cin >> A[i][j];
		}
	}
	
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			for(int s_i = i; s_i < n; s_i++){
				for(int s_j = j; s_j < m; s_j++){
					for(int p_i = i; p_i <= s_i; p_i++){
						for(int p_j = j; p_j <= s_j; p_j++){
							sum += A[p_i][p_j];
						}
					}
					if(sum > maxi){
						maxi = sum;
					}
					sum = 0;
				}
			}
		}
	}
	
	cout << maxi << endl;
	
	return 0;
 }  

三羊献瑞

结果填空题目,仅需回答答案即可。不要填写代码。

观察下面的加法算式:

    祥瑞生辉
+   三羊献瑞
——————
  三羊生瑞气

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。“三”和“祥”不能为 0。请你计算出“三羊献瑞”所代表的 4 位数是什么?(答案唯一)

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字,行末不要换行

回答区域输入:

1085

原始代码

#include <iostream>
#include <stdio.h>

using namespace std;
int main()
{
	int c1 = 0;	// 祥 
	int c2 = 0;	// 瑞 
	int c3 = 0; // 生 
	int c4 = 0;	// 辉 
	int c5 = 0;	// 三 
	int c6 = 0;	// 羊 
	int c7 = 0;	// 献 
	int c8 = 0;	// 气 
	
	for(c1 = 0; c1 <= 9; c1++){
		for(c2 = 0; c2 <= 9; c2++){
			for(c3 = 0; c3 <= 9; c3++){
				for(c4 = 0; c4 <= 9; c4++){
					for(c5 = 0; c5 <= 9; c5++){
						for(c6 = 0; c6 <= 9; c6++){
							for(c7 = 0; c7 <= 9; c7++){
								for(c8 = 0; c8 <= 9; c8++){
									if(c5 != 0){
										if(c1 != 0){
											if(c1 != c2 && c1 != c3 && c1 != c4 && c1 != c5 && c1 != c6 && c1 != c7 && c1 != c8){
												if(c2 != c3 && c2 != c4 && c2 != c5 && c2 != c6 && c2 != c7 && c2 != c8){
													if(c3 != c4 && c3 != c5 && c3 != c6 && c3 != c7 && c3 != c8){
														if(c4 != c5 && c4 != c6 && c4 != c7 && c4 != c8){
															if(c5 != c6 && c5 != c7 && c5 != c8){
																if(c6 != c7 && c6 != c8){
																	if(c7 != c8){
																		if(1000*c1 + 100*c2 + 10*c3 + c4 + 1000*c5 + 100*c6 + 10*c7 + c2 == 10000*c5 + 1000*c6 + 100*c3 + 10*c2 +c8){
																			cout << c5 << c6 << c7 << c2 << endl;
																		}
																	}
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	
	return 0;
 }  

四平方和

使用代码实现题目解答。编译器限时 1000 ms,内存限制为 131072 KB。

四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。

比如:
$5=0^{2}+0^{2}+1^{2}+2^{2}$
$7=1^{2}+1^{2}+1^{2}+2^{2}$

则对于一个给定的正整数 $n$,可以表示为:$n=a^{2}+b^{2}+c^{2}+d^{2}$。

你需要求出字典序最小的一组解 $a,b,c,d$。

字典序大小:从左到右依次比较,如果相同则比较下一项,直到有一项不同,较小的一方字典序更小,反之字典序更大,所有项均相同则二者字典序相同。

输入格式

程序输入为一个正整数 $N(1\leqslant N\leqslant 5000000)$。

样例输入

5

样例输出

12

回答区域输入:

#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;
int main()
{
	int a, b, c, d;
	int N, sqrtN, sqrtNN;
	int mark = 0;
	
	cin >> N;
	sqrtN = sqrt(N);
	sqrtNN = sqrt(sqrtN);
	
	for(a = 0; a<= sqrtNN; a++){
		for(b = 0; b <= sqrtNN; b++){
			for(c = 0; c <= sqrtN; c++){
				for(d = 0; d <= sqrtN; d++){
					if(a*a + b*b + c*c + d*d == N){
						cout << a << " " << b << " " << c << " " << d;
						mark = 1;
					}
					if(mark != 0){
					break;
					}
				}
				if(mark != 0){
				break;
				}
			}
			if(mark != 0){
			break;
			}
		}
		if(mark != 0){
		break;
		}
	}
	
	return 0;
 }  

为什么这里没有用到 printf() ?

因为 printf() 在终端超时了…… 相比 printf(),cout 的线程安全性让 cout 在绝大多数时间速度优于 printf()。

页面: 1 2 3 4 5 6

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注