[原]连连看算法(1 位领导批示)
- 2011-09-15
- 分类:JavaScript
- 作者:银子
- 653 位领导视察
连连看的规则大家应该都很清楚:两点间最多允许转弯两次,也就是最多允许由三条直线相连。
如:一个 6X6的连连看,由于周围一圈必须有路径,X方向与Y方向需要都加一,实际大小为8X8,坐标的信息存放到一个二维数组。
如下图:
连连看的规则大家应该都很清楚:两点间最多允许转弯两次,也就是最多允许由三条直线相连。
如:一个 6X6的连连看,由于周围一圈必须有路径,X方向与Y方向需要都加一,实际大小为8X8,坐标的信息存放到一个二维数组。
如下图:
原问题: http://bbs.blueidea.com/thread-2942989-1-1.html
随便写了一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php function createFile($filename, $content = '') { $fp = file_put_contents($filename, $content); } // 要创建的文件名称 $filename = 'www.txt'; if(file_exists($filename)) { // 打开当前目录 $handle = opendir('./'); $fileinfo = pathinfo($filename); //print_r($fileinfo); $files = array(); while (false !== ($file = readdir($handle))) { if(preg_match_all("/{$fileinfo['filename']}(\d*)\.{$fileinfo['extension']}/i", $file, $match)) { $max = max($match[1]); if($max) { $createfile = $fileinfo['filename'] . ($max + 1) . '.' . $fileinfo['extension']; } else { $createfile = $fileinfo['filename'] . '1.' . $fileinfo['extension']; } } } createFile($createfile); } else { createFile($filename); } ?> |
另一种思路..使用临时文件作记数器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php function createFile($filename, $content = '') { if(file_exists($filename . '.tmp')) { $num = (int) file_get_contents($filename . '.tmp') + 1; $fileinfo = pathinfo($filename); file_put_contents($fileinfo['filename'] . '(' . $num . ')' .$fileinfo['extension'], $content); file_put_contents($filename . '.tmp', $num); } else { file_put_contents($filename, $content); file_put_contents($filename . '.tmp', 1); } } createFile('test.txt'); ?> |
求出100-1000中的水仙花数
算法一:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include "stdio.h" void main() { int i,a,b,c; for(i=100;i<1000;i++) { a = i/100; b = (i-100*a)/10; c = i-100*a-10*b; if(i==a*a*a+b*b*b+c*c*c) printf("%d %d %d %d \n",a,b,c,i); } } |
算法二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include "stdio.h" void main() { int i,j,k,a1,a2; for(i=1;i<=9;i++) { for(j=0;j<=9;j++) { for(k=0;k<=9;k++) { a1 = i*i*i+j*j*j+k*k*k; a2 = i*100+j*10+k; if(a1==a2) printf("%d\n", a2); } } } } |
今天某人碰到的一个题目.我写了两种解法..记录一下其中一种
P.S.JS的数组初始化真的很白白..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <script type="text/javascript"> var arr = new Array(1,2,3,4,5,6,7,2,3); var tmp = new Array(0,0,0,0,0,0,0,0,0); for(var i=0, len=arr.length; i<len; i++) { var j = arr[i]; if(tmp[j] != 0) { alert(j); } else { tmp[j] = 1; } } </script> |
函数:反转数组.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include "stdio.h" void inverse_arr(int *p) { int *q,t; q = p+9; while(p<q) { t=*p; *p=*q; *q=t; p++; q--; } } void main() { int a[10] = {2,1,5,12,56,111,67,12,56,99}; int i; inverse_arr(a); for(i=0;i<10;i++) { printf(" %d ",a[i]); } } |
起泡排序算法.从小到大排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include "stdio.h"; void main() { int i, j, tmp, arr[6] = {9,5,8,4,0,2}; for(i=1;i<6;i++) { for(j=0;j<6-i;j++) { if(arr[j]>arr[j+1]) { tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } } for(i=0;i<6;i++) printf("%d",arr[i]); } |