选择问题 and 字谜游戏问题
#include <stdio.h>
#include <stdlib.h>
// 第一题
// 找出N个数的第k个最大者
// 方法1:排序(冒泡),降序找出第k个值
// 方法2:选前k个点进行降序排序,后面的数进行比较,
// 如果数比第k个数小则忽略, 复杂度低于方法1
#define TYPE int
#define TESTBUBLESORT 1
#define TESTBLOCKCOMPARE 1
#define TESTWORDPUZZLE 1
int findk_bublesort(TYPE *pData, int N, int k);
int findk_blockcompare(TYPE *pData, int N, int k); // 缺点修改了原数据
// 第二题
// wordpuzzle猜字谜游戏,在三个方向上找单词
// dirction = 0 水平方向 从左至右
// dirction = 1............右..左
// ...........2............上..下
// ...........3............下..上
// ...........4............正对角线->
// ...........5....................<-
// ...........6............负对角线<-
// ...........7....................->
// pData字谜
// pattern:欲猜的单词
int wordpuzzle(char *pData, char *pattern, int row, int col, int driction);
int my_strlen(char *s); // 获取字符串的长度
void my_strcat(char *s, char *t); // 连接字符串
void my_strcpy(char *s, char *t); // 复制字符串 // Test Model
int main()
{
printf("Hello world!\n"); int N = 10000;
int k = N / 2;
TYPE *pTestData = (TYPE *)malloc(sizeof(TYPE) * N);
int i;
for (i = 0; i < N; ++i)
pTestData[i] = i;
#ifdef TESTBUBLESORT
// printf("the k = %d in N is %d\n", k, findk_bublesort(pTestData, N, k));
#endif
#ifdef TESTBLOCKCOMPARE
printf("the k = %d in N is %d\n", k, findk_blockcompare(pTestData, N, k));
#endif
// for (i = 0; i < N; ++i)
// printf("%d ", pTestData[i]);
// printf("\n");
free(pTestData); #ifdef TESTWORDPUZZLE
int row = 4;
int col = 4;
char *WorldModle = (char *)malloc(sizeof(char) * row * col);
char *a1 = "this";
char *a2 = "wats";
char *a3 = "oahg";
char *a4 = "fght";
my_strcpy(WorldModle, a1);
my_strcat(WorldModle, a2);
my_strcat(WorldModle, a3);
my_strcat(WorldModle, a4);
char *pattern = "that";
int np = my_strlen(pattern); if (np > row || np > col)
{
fputs("the pattern size is bigger!", stderr);
return -1;
}
for (i = 0; i < 8; ++i)
{
if (wordpuzzle(WorldModle, pattern, row, col, i))
{
printf("find word:[%s] at dirction [%d] of wordwidget\n", pattern, i);
break;
}
}
#endif
return 0;
} void my_strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}
void my_strcat(char *s, char *t)
{
while(*s)
{
++s;
}
my_strcpy(s, t);
} int findk_bublesort(TYPE *pData, int N, int k)
{
// 对数据进行冒泡排序 降序
int i, j;
for (i = 0; i < N; ++i)
{
for (j = i + 1; j < N; ++j)
{
if (pData[i] < pData[j])
{
TYPE temp;
temp = pData[i];
pData[i] = pData[j];
pData[j] = temp;
}
}
}
return pData[k - 1];
} int findk_blockcompare(TYPE *pData, int N, int k)
{
// 先读入前k个数进行降序排列,然后与后面的数比较
// 前k个数进行降序排列
int i, j, z;
for (i = 0; i < k; ++i)
{
for (j = i + 1; j < k; ++j)
{
if (pData[i] < pData[j])
{
TYPE temp;
temp = pData[i];
pData[i] = pData[j];
pData[j] = temp;
}
}
}
// 与后面的数与前k个数进行比较
for (i = k; i < N; ++i)
{
for (j = 0; j < k; ++j)
{
if (pData[j] <= pData[i])
{
// 大于k个数中的一个 插入新元素
for (z = k - 2; z >= j; --z)
pData[z + 1] = pData[z]; // 右移元素
pData[j] = pData[i]; // 插入新元素
break;
}
}
}
return pData[k - 1];
} int wordpuzzle(char *pData, char *pattern, int row, int col, int driction)
{
int result = 0;
int i, j; int np; int k = 0;
switch (driction)
{
case 0: // 从水平方向从左至右找
for (i = 0; i < row; ++i)
{
for (j = 0; j < col; ++j)
{
if (pData[i * col + j] == pattern[k])
{
k++;
}
if (pattern[k] == '\0')
result = 1;
}
k = 0;
} break; case 1: // 从水平方向上从右至左找
for (i = 0; i < row; ++i)
{
for (j = col - 1; j >= 0; --j, --np)
{
if (pData[i * col + j] == pattern[k])
{
k++;
}
if (pattern[k] == '\0')
result = 1;
}
k = 0;
}
break; case 2: // 按列从上往下找
for (i = 0; i < col; ++i)
{
for (j = 0; j < row; ++j)
{
if (pData[j * row + i] == pattern[k])
{
k++;
}
if (pattern[k] == '\0')
result = 1;
}
k = 0;
}
break; case 3: // 按列从下往上找
for (i = 0; i < col; ++i)
{
for (j = row - 1; j >= 0; --j)
{
if (pData[j * row + i] == pattern[k])
{
k++;
}
if (pattern[k] == '\0')
result = 1;
}
k = 0;
}
break; case 4: // 按正对角线从左到右
for (i = 0; i < row; ++i)
{
for (j = 0; j < col; ++j)
{
if (i == j)
{
if (pData[i * row + j] == pattern[k])
{
k++;
}
if (pattern[k] == '\0')
result = 1;
}
}
}
k = 0;
break; case 5: // 按正对角线从右到左
for (i = row - 1; i >= 0; --i)
{
for (j = col - 1; j >= 0; --j)
{
if (i == j)
{
if (pData[i * row + j] == pattern[k])
{
k++;
}
if (pattern[k] == '\0')
result = 1;
}
}
}
k = 0;
break; case 6: // 按负对角线从右到左
for (i = col - 1; i >= 0; --i)
{
for (j = 0; j < row ; --j)
{
if (i + j == col - 1)
{
if (pData[i * row + j] == pattern[k])
{
k++;
}
if (pattern[k] == '\0')
result = 1;
}
}
}
k = 0;
break; case 7: // 从负对角线从左到右
for (i = row - 1; i >= 0; --i)
{
for (j = 0; j < col; ++j)
{
if (i + j == row - 1)
{
if (pData[i * row + j] == pattern[k])
{
k++;
}
if (pattern[k] == '\0')
result = 1;
}
}
}
k = 0;
break;
default:
break;
}
return result;
} int my_strlen(char *s)
{
int n = 0;
while (*s++)
++n;
return n;
}
选择问题 and 字谜游戏问题的更多相关文章
- 《数据结构算法分析C描述》引论:选择问题,字谜游戏问题
#include <stdio.h> #include <stdlib.h> // 第一题 // 找出N个数的第k个最大者 // 方法1:排序(冒泡),降序找出第k个值 // ...
- C++分享笔记:5X5单词字谜游戏设计
笔者在大学二年级刚学完C++程序设计后,做过一次课程设计,题目是:5X5单词字谜游戏设计.为了设计算法并编写程序,笔者在当时颇费了一番心力,最后还是成功地完成了.设计中不乏有精妙之处.该程序设计完全是 ...
- Java 猜字谜游戏
package fundmental_excise6; import java.util.Arrays; import java.util.Scanner; /** * @author : jeasi ...
- Android研究之为基于 x86 的 Android* 游戏选择合适的引擎具体解释
摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90% ...
- 为基于 x86 的 Android* 游戏选择合适的引擎
摘要 游戏开发者知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中.它们所占的比例超过 90%). ...
- 使用cocos2d-x v3.1开发小游戏(基本框架)
小游戏的组成 欢迎界面 在游戏资源未全部加载完之前就需要载入,避免进入游戏会有一段黑屏时间. 可以用来展示游戏名称或者开发者logo. 开始菜单界面 一般用于显示游戏名称和关卡选择(或者称游戏难度选择 ...
- 自制html5塔防游戏
这是一款由html5里的canvas和普通html元素结合的小游戏,游戏比较简单单一.主要是以建塔,防御为主.下面是游戏的一张截图: 这里是游戏的地址,直接去玩下吧:http://www.lovewe ...
- Content Factory:辅助 MonoGame 游戏开发
Content Factory 是一款辅助 MonoGame 游戏开发的工具.它提供素材管理的多项功能,包括编译素材.编辑自定义数据等,并能同时应用多个游戏平台. 项目设置 选择要创建游戏项目的平台, ...
- 游戏服务器生成全局唯一ID的几种方法
在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使 ...
随机推荐
- 20 个具有惊艳效果的 jQuery 图像缩放插件
jQuery相对与Flash的魔力已经贯穿整个网络.尽管,Flash层被认为是用于网页设计的首选,然而随着jQuery的出现,以及他的酷似Flash的交互式特效使得网页更加的优雅——Flash开始靠边 ...
- 为什么谷歌的JSON响应以while(1);开头?
问题(QUESTION): 我有个问题一直很好奇就是:为什么谷歌的JSON响应以while(1);开头?举个例子,当把谷歌日历打开和关掉时,会返回这样的JSON对象: while(1);[['u',[ ...
- Android实现图片轮显效果——自定义ViewPager控件
一.问题概述 使用ViewPager控件实现可横向翻页.水平切换图片等效果,但ViewPager需要手动滑动才能切换页面,图片轮显效果的效果本质上就是在ViewPager控件的基础上让它能自动的进行切 ...
- html 空白汉字占位符
可以看作一个空白的汉字 == 普通的英文半角空格 == == == no-break space (普通的英文半角空格但不换行) == 中文全角空格 (一个中文宽度) == ...
- Spark RDD关联操作小结
前言 Spark的rdd之间的关系需要通过一些特定的操作来实现, 操作比较多也,特别是一堆JOIN也挺容易让人产生混乱的. 因此做了下小结梳理一下. 准备数据 var rdd1 = sc.makeRD ...
- linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]
linux是文件型系统,所有硬件如软件都会在对于的目录下面有相应的文件表示.对于dev这个目录,我们知道它下面的文件,表示的是linux的设备.在windows系统中,设备大家很好理解,象硬盘,磁盘指 ...
- 【ACM】杭电ACM题一直WA求高手看看代码
数据测试了好几个都没问题,可以就是WA不让过,检测了2个小时还是没发现有什么问题T_T!!求高手看看代码,小弟在此谢谢各位哦! #include <stdio.h> #include &l ...
- Hive Python Streaming的原理及写法
在Hive中,须要实现Hive中的函数无法实现的功能时,就能够用Streaming来实现. 其原理能够理解成:用HQL语句之外的语言,如Python.Shell来实现这些功能,同一时候配合HQL语句, ...
- js的正则匹配 和 blur
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js&qu ...
- 跨站点脚本编制-XSS 描述及解决方法
跨站点脚本编制可能是一个危险的安全性问题,在设计安全的基于 Web 的应用程序时应该考虑这一点.本文中,描述了这种问题的本质.它是如何起作用的,并概述了一些推荐的修正策略. 当今的大多数网站都对 We ...