#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; }

转载于:https://www.cnblogs.com/alantu2018/p/8464173.html

选择问题 and 字谜游戏问题相关推荐

  1. 为什么我选择用 C 编写游戏?

    "古老"的C++,仍然是当前编写游戏时最常用的语言,但是 C 为什么才是最适合的? 作者 | Jonathan Whiting 译者 | 弯月,责编 | 郭芮 出品 | CSDN( ...

  2. 鼠标使用板载内存和使用计算机上,鼠标怎么选?教你选择适合自己的游戏鼠标。...

    原标题:鼠标怎么选?教你选择适合自己的游戏鼠标. 鼠标是我们平时接触电脑最多的部件之一,一只适合自己的鼠标往往能给你带来更加舒服的体验. 那么今天我们就来说一说"如何选购一款适合自己的鼠标& ...

  3. 如何选择靠谱的游戏音乐外包呢?

    对于游戏开发商来说,让游戏能有一个好的音乐,对游戏的后期发展有着至关重要的作用.但是目前游戏音乐工作室混杂,除了专业的游戏音乐工作室和个人以外,还有不少其他音乐人.面对混杂的游戏音乐行业,应该从哪些方 ...

  4. 迪酷CS1.6 3248 版本选择角色或进游戏闪退的解决办法!

    最初接触迪酷CS1.6是博主12岁那年,有着浓厚的怀旧和美好的记忆,随着岁月的堆叠突然想起了这款经典的不能再经典的游戏,幸运的是当时博主有备份迪酷CS1.6的安装程序,所以不用去网上大费周章的寻找,很 ...

  5. 为什么不可以使用哈曼顿距离_用Python计算8字谜游戏中的曼哈顿距离

    我试图用Python编写一个简单的a*解算器,用于一个简单的8字谜游戏. 我用这种方式代表了我比赛的目标:goal = [[1, 2, 3], [8, 0, 4], [7, 6, 5]] 我的问题是, ...

  6. 如何选择靠谱的游戏联运系统?

    现在是一个新兴的娱乐时代,游戏是年轻人最喜欢的娱乐方式之一,很多企业家都在关注着这个领域,所以一款稳定的游戏联运系统不仅是一个入行门槛,也是一个很好的开始. 只要按照以下的条件来选择,就不会有任何问题 ...

  7. 数据结构猜字谜游戏(Java语言编写)

    前几年买的一本数据结构与算法分析的书籍, 偶然看到以前有很多题目没有做, 现在抽空来看一下. 题目:输入是由一些字母构成的一个二维数组以及一组单词组成.目标是要找出字谜中的单词, 这些单词可能是水平. ...

  8. Java 猜字谜游戏

    package fundmental_excise6;import java.util.Arrays; import java.util.Scanner;/*** @author : jeasion* ...

  9. java获取一个目录下所有字谜_Java 猜字谜游戏 - osc_4jkldo6l的个人空间 - OSCHINA - 中文开源技术交流社区...

    package fundmental_excise6; import java.util.Arrays; import java.util.Scanner; /** * @author : jeasi ...

最新文章

  1. AI一分钟|阿里云解释故障原因:触发了一个未知代码Bug;清华蝉联ISC18超算竞赛总冠军...
  2. python androidhelper 语音识字_Android语音播报、后台播报、语音识别
  3. 小米3 开发人员选项
  4. Yii AR Model 查询
  5. 分布式文件系统研究-fastDSF架构介绍
  6. Sharepoin学习笔记—架构系列--08 Sharepoint的数据模型(DataModel)、数据管理(Data Management)与查询(Query System)
  7. Flask-SQLAlchemy 对数据库的增查改删
  8. 2场直播丨OGG日常运维及故障处理、云原生数据仓库AnalyticDB
  9. 小米手机将终结卡顿?未来所有机型将升级新MIUI
  10. php if条件循环语句,PHP:IF语句可以单独运行,但不能在WHILE循环内运行
  11. Java基础6:代码块与代码加载顺序
  12. working copy is not up-to-date
  13. .NET中各种数据库连接大全
  14. 《HTML与CSS设计》课程总结,网页设计课程学习心得总结
  15. 微信小程序分享/转发功能方法
  16. 做出胶卷的效果——图片循环滚动播放
  17. kdev-ruby 停止开发,原 maintainer 转用其它编辑器
  18. 【计算机操作系统】新兴操作系统
  19. 自媒体推广有哪些好处?
  20. 什么是线程线程和进程的区别

热门文章

  1. 计算机专业认证协会,我校计算机科学与技术专业接受教育部中国工程教育专业认证协会专家组现场考查...
  2. java中刷新页面的js,[Java教程]js页面刷新之实现框架内外刷新(整体、局部)
  3. java日期存入数据库_怎样在Java中将日期转化插入到数据库
  4. nullable java_java-持久性@Column nullable = false可以插入null
  5. 本地服务器文件恢复,本地服务器文件恢复
  6. GT Transceiver的复位与初始化(3)TX初始化和复位流程
  7. Debugging JTAG
  8. 用于初始化Xilinx 存储 IP核的COE文件格式
  9. MultiBoot设计参考链接
  10. 【 FPGA 】时钟偏斜及其影响