一根只有三个刻度的 9 寸长的尺子,只量一次可以量长度为 1 到 9 寸的长度为整数的物体,求尺 子上的刻度分别是多少
一根只有三个刻度的 9 寸长的尺子,只量一次可以量长度为 1 到 9 寸的长度为整数的物体,求尺
子上的刻度分别是多少(给出所有刻度组合) 。
#include <iostream>
#include <map>
using namespace std;
int a[4];
void backTrack(int n) {
if (n == 4) {
a[3] = 9 - a[0] - a[1] - a[2];
map<int, bool> m;
for (int i = 1; i < 10; i++) {
m[i] = false;
}
for (int i = 0; i < 4; i++) {
m[a[i]] = true;
int sum = a[i];
for (int j = i - 1; j >= 0; j--) {
sum += a[j];
m[sum] = true;
}
}
bool result = true;
for (int i = 1; i < 10; i++) {
if (!m[i]) {
result = false;
break;
}
}
if (result) {
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
}
}
else {
for (int i = 1; i < 10; i++) {
a[n - 1] = i;
int sum = 0;
for (int j = 0; j < n; j++) {
sum += a[j];
}
if (sum <= 9) {
backTrack(n + 1);
}
}
}
}
int main() {
backTrack(1);
return 0;
}
#include <map>
using namespace std;
int a[4];
void backTrack(int n) {
if (n == 4) {
a[3] = 9 - a[0] - a[1] - a[2];
map<int, bool> m;
for (int i = 1; i < 10; i++) {
m[i] = false;
}
for (int i = 0; i < 4; i++) {
m[a[i]] = true;
int sum = a[i];
for (int j = i - 1; j >= 0; j--) {
sum += a[j];
m[sum] = true;
}
}
bool result = true;
for (int i = 1; i < 10; i++) {
if (!m[i]) {
result = false;
break;
}
}
if (result) {
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
}
}
else {
for (int i = 1; i < 10; i++) {
a[n - 1] = i;
int sum = 0;
for (int j = 0; j < n; j++) {
sum += a[j];
}
if (sum <= 9) {
backTrack(n + 1);
}
}
}
}
int main() {
backTrack(1);
return 0;
}
1 1 4 3
1 3 3 2
2 3 3 1
3 4 1 1
结果为:
(1) 1,2,6
(2)1,4,7
(3)2,5,8
(4)3,7,8