函数走步功能的实现 即随机步法的初步实现
2015-07-21 16:10
423 查看
很多类似的走步功能,这里给出来了一个比较简单的方法实现走步功能,部分代码可以自己进行修改,初发博客,代码格式或多或少有些不规范,而且写的比较潦草,没有去进行代码优化,忘大家见谅,VS2013开发,lninux下兼容:
/****************************************************************************************************************************
函数功能:实现A-Z的随机走步功能
作者:徐权
日期:2015-7-21
*****************************************************************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define N 10 //定义数组宽度,测试的时候可以自行调节宽度,不同宽度需要的内存不一样而已
int main(void)
{
int i, j, count, xq = 1, scount = 0;
int acount_first,acount_second,acount_third;//用于记录3个不同数据,由于后续没有优化,最先做的就是这个了,读者可以自行优化
int asum;
int k = 0,p = 0;
char sum; //记录变化的str[i][j]的值,用于数值交换
char str
;
memset(str, '.', sizeof(str));
/* 打印初始函数 */
printf("初始函数 \n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%c ", str[i][j]);
}
printf("\n");
}
srand((int)time(NULL)); //随机数随时间变化改变
//随机定义初始化‘A’的位置,使得每次运行结果都不一样,初始化i和j的值
i = rand() % N;
j = rand() % N;
str[i][j] = 'A'; //初始化起始点
while (str[i][j] < 'Z')
{
count = rand() % 4; //生成0,1,2,3 的随机数
xq = 1; // 初始化内存循坏跳出条件
scount = 0; //初始化外层循坏跳出循坏
//初始化随机0,1,2,3的条件,限制避免scount数值无故增大
while (xq == 1)
{
if (((count == 0) && ((j + 1) < N)) && (str[i][j + 1] == '.'))
{
sum = str[i][j] + 1;
j++;
str[i][j] = sum;
xq++;
}
else if (((count == 1) && ((i + 1) < N)) && (str[i + 1][j] == '.'))
{
sum = str[i][j] + 1;
i++;
str[i][j] = sum;
xq++;
}
else if (((count == 2) && ((j - 1) >= 0)) && (str[i][j - 1] == '.'))
{
sum = str[i][j] + 1;
j--;
str[i][j] = sum;
xq++;
}
else if (((count == 3) && ((i - 1) >= 0)) && (str[i - 1][j] == '.'))
{
sum = str[i][j] + 1;
i--;
str[i][j] = sum;
xq++;
}
else
{
if (k == 0)//这里是一个第一个数随机,其余不随机的做法,没有优化,最笨的方法写出来的
{
acount_first = rand() % 4;
while (acount_first == count)
{
acount_first = rand() % 4;
}
acount_second = count;
k++;
}
else if (k == 2)
{
for (p = 0; p < 4; p++)
{
asum = (count + 1) % 4;
if ((asum != acount_first) && (asum != acount_second))
{
count = asum;
acount_third = count;
break;
}
count++;
}
}
else
{
for (p = 0; p < 4; p++)
{
asum = (count + 1) % 4;
if ((asum != acount_first) && (asum != acount_second) && (asum != acount_third))
{
count = asum;
break;
}
count++;
}
}
scount++;
if (scount == 4)
{
xq++;
}
}
}
k = 0;
if (scount == 4)
{
break;
}
}
/* 打印函数 */
puts("运行后的函数如下");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%c ", str[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
代码的花括号都没有删掉,所以有100多行,大家可以自己优化代码,有个代码是几十行就解决了的,我的是草案,望大家采纳和提出修改意见,如果有优化方案,可以回复我,我会非常感谢大家了,希望各位博友共同进步,谢谢!!!
/****************************************************************************************************************************
函数功能:实现A-Z的随机走步功能
作者:徐权
日期:2015-7-21
*****************************************************************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define N 10 //定义数组宽度,测试的时候可以自行调节宽度,不同宽度需要的内存不一样而已
int main(void)
{
int i, j, count, xq = 1, scount = 0;
int acount_first,acount_second,acount_third;//用于记录3个不同数据,由于后续没有优化,最先做的就是这个了,读者可以自行优化
int asum;
int k = 0,p = 0;
char sum; //记录变化的str[i][j]的值,用于数值交换
char str
;
memset(str, '.', sizeof(str));
/* 打印初始函数 */
printf("初始函数 \n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%c ", str[i][j]);
}
printf("\n");
}
srand((int)time(NULL)); //随机数随时间变化改变
//随机定义初始化‘A’的位置,使得每次运行结果都不一样,初始化i和j的值
i = rand() % N;
j = rand() % N;
str[i][j] = 'A'; //初始化起始点
while (str[i][j] < 'Z')
{
count = rand() % 4; //生成0,1,2,3 的随机数
xq = 1; // 初始化内存循坏跳出条件
scount = 0; //初始化外层循坏跳出循坏
//初始化随机0,1,2,3的条件,限制避免scount数值无故增大
while (xq == 1)
{
if (((count == 0) && ((j + 1) < N)) && (str[i][j + 1] == '.'))
{
sum = str[i][j] + 1;
j++;
str[i][j] = sum;
xq++;
}
else if (((count == 1) && ((i + 1) < N)) && (str[i + 1][j] == '.'))
{
sum = str[i][j] + 1;
i++;
str[i][j] = sum;
xq++;
}
else if (((count == 2) && ((j - 1) >= 0)) && (str[i][j - 1] == '.'))
{
sum = str[i][j] + 1;
j--;
str[i][j] = sum;
xq++;
}
else if (((count == 3) && ((i - 1) >= 0)) && (str[i - 1][j] == '.'))
{
sum = str[i][j] + 1;
i--;
str[i][j] = sum;
xq++;
}
else
{
if (k == 0)//这里是一个第一个数随机,其余不随机的做法,没有优化,最笨的方法写出来的
{
acount_first = rand() % 4;
while (acount_first == count)
{
acount_first = rand() % 4;
}
acount_second = count;
k++;
}
else if (k == 2)
{
for (p = 0; p < 4; p++)
{
asum = (count + 1) % 4;
if ((asum != acount_first) && (asum != acount_second))
{
count = asum;
acount_third = count;
break;
}
count++;
}
}
else
{
for (p = 0; p < 4; p++)
{
asum = (count + 1) % 4;
if ((asum != acount_first) && (asum != acount_second) && (asum != acount_third))
{
count = asum;
break;
}
count++;
}
}
scount++;
if (scount == 4)
{
xq++;
}
}
}
k = 0;
if (scount == 4)
{
break;
}
}
/* 打印函数 */
puts("运行后的函数如下");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%c ", str[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
代码的花括号都没有删掉,所以有100多行,大家可以自己优化代码,有个代码是几十行就解决了的,我的是草案,望大家采纳和提出修改意见,如果有优化方案,可以回复我,我会非常感谢大家了,希望各位博友共同进步,谢谢!!!
相关文章推荐
- C#自定义函数NetxtString生成随机字符串
- C#对list列表进行随机排序的方法
- mysql中RAND()随便查询记录效率问题和解决办法分享
- C#生成不重复随机字符串类
- asp下实现记录集内随机取记录的代码
- 论坛头像随机变换代码
- php中随机函数mt_rand()与rand()性能对比分析
- C#实现对数组进行随机排序类实例
- JS实现随机乱撞彩色圆球特效的方法
- JavaScript实现随机替换图片的方法
- js随机颜色代码的多种实现方式
- JS随机调用指定函数的方法
- php随机获取金山词霸每日一句的方法
- JavaScript数组随机排列实现随机洗牌功能
- C++实现随机生成迷宫地牢
- MYSQL随机抽取查询 MySQL Order By Rand()效率问题
- PHP中函数rand和mt_rand的区别比较
- 随机生成文件名的函数
- MySQL Order By Rand()效率分析
- MYSQL 随机 抽取实现方法及效率分析