您的位置:首页 > 其它

[CSDN]首页看到的一道算法题

2013-02-27 20:34 141 查看
1  2  3   

4  5  6

7  8  9 

    0  

说某移动电信运营商开发了一个名为“争霸”的游戏,为鼓励用户参与,凡签约用户均可获得前三位为888的手机号码,但这样的话就有10的8次方种可能,现在给出一种限制条件减少号码数量,就是两个相邻号码之间的关系必须满足象棋里的“将步”

即:给你前三位都是888  后面8位是上面的数字  每个数的相邻只有有限个数字

比如8881*  那么与1相邻的只可以是2和4  

888812那么与2相邻的只可以是1,5,3  就是这个意思

如果选择5  那么可以选择的有2,4,6,8 

问:

1  用什么算法比较好?为什么?

2  最优的算法是什么?为什么?

3  用什么数据结构最好?为什么?

4  时间复杂度和空间复杂度?
5  一共有多少种情况?

#include "stdio.h"
#include "stdlib.h"

int main(int argc, char* argv[])
{
int a[10]={1,1,1,1,1,1,1,1,1,1};
int b[10];

for(int i=1;i<=7;i++){

for(int j=0;j<=9;j++){
b[j]=a[j];
}

a[0]=b[8];
a[1]=b[2]+b[4];
a[2]=b[1]+b[3]+b[5];
a[3]=b[2]+b[6];
a[4]=b[1]+b[5]+b[7];
a[5]=b[2]+b[4]+b[6]+b[8];
a[6]=b[3]+b[9]+b[5];
a[7]=b[4]+b[8];
a[8]=b[5]+b[7]+b[9]+b[0];
a[9]=b[6]+b[8];
}

int sum=a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9];
printf("sum=%d\n",sum);
return 0;
}


sum=14826
应该是属于回溯算法的性质吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: