学习ING

一根只有三个刻度的 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
<intbool> 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

 

 

posted @ 2010-04-12 20:11  祝雄锋  阅读(1980)  评论(0编辑  收藏  举报