方程的解
结果填空题目,仅需回答答案即可。不要填写代码。
方程:$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()。