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 时间复杂度和空间复杂度?
sum=14826
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
应该是属于回溯算法的性质吧。