当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » C/C++  » 编程基础
分享到: 
收藏 +0
2
python核心编程6-14习题的解题思路
设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种手势:石头,剪子,布.胜利者从
下面的规则中产生,这个规则本身是个悖论.
(a) 布包石头.
(b)石头砸剪子,
(c)剪子剪破布.在你的计算机版本中,用户输入她/他的选项,计算机找一个随机选项,然后由你
的程序来决定一个胜利者或者平手.注意:最好的算法是尽量少的使用 if 语句.
下面用c语言实现一边。
当然还有其它的方法,用数字0、1、2来代表剪刀、石头、布。
标签: <无>

代码片段(1) [全屏查看所有代码]

1. [代码][C/C++]代码     跳至 [1] [全屏预览]

/******************************************************
python北京周末培训班
https://github.com/pythonpeixun/article/blob/master/beijing_weekend.md
python上海周末培训班
https://github.com/pythonpeixun/article/blob/master/shanghai_weekend.md
python远程视频培训
https://github.com/pythonpeixun/article/blob/master/index.md
c语言从入门到精通远程视频培训
https://github.com/pythonpeixun/article/blob/master/c_course.md
咨询:qq:1465376564  迪艾姆python培训黄哥
******************************************************/
/******************************************************
python北京周末培训班
https://github.com/pythonpeixun/article/blob/master/beijing_weekend.md
python上海周末培训班
https://github.com/pythonpeixun/article/blob/master/shanghai_weekend.md
python远程视频培训
https://github.com/pythonpeixun/article/blob/master/index.md
c语言从入门到精通远程视频培训
https://github.com/pythonpeixun/article/blob/master/c_course.md
咨询:qq:1465376564  迪艾姆python培训黄哥
******************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int exist_in(char *arr1[][2], char *arr2[], int length);

int main(void)
{
	int i = 0, length;
	time_t t;
	char *person  ;
	char *computer ;
	char *computer_person[2];
	char *guess_arr[] = {"石头", "剪刀", "布"};
	char *win[3][2] = {{"布", "石头"}, {"石头", "剪刀"}, {"剪刀", "布"}};
	
	length = (int)sizeof(win)/(int)sizeof(win[0]);

	while (1)
	{
		srand((unsigned) time(&t));
		i = rand() % 3 ;
		
		computer = (char *)malloc(100 * sizeof(char));
		strcpy(computer,guess_arr[i] );
		printf("请输入 剪刀 石头 布:\n");
	
		person = (char *)malloc(100 * sizeof(char));
		scanf("%s", person);
	
		computer_person[0] = computer;
		computer_person[1] = person;

		if (strcmp(computer, person) == 0 )
		{
			printf("平手!\n");
		}
		else if (exist_in(win, computer_person, length))
		{
			  printf("电脑获胜\n");
		}
		else
		{
		    printf("人获胜\n");
			
			free(computer);
			free(person);	
	
			person = NULL;
			computer = NULL;
		    break;
		}
		
		free(computer);
        free(person);
		person = NULL;
		computer = NULL;

	}
    
	
	return 0;
 }

int exist_in(char *arr1[][2], char *arr2[], int length)
{
	int i;
	for (i = 0; i < length; i++)
	{
		if (strcmp(arr1[i][0], arr2[0]) == 0 && strcmp(arr1[i][1], arr2[1]) == 0)
		{
			return 1;
		}

	}

    return 0;

 }


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(17)

  • 1楼:黄哥Python培训 发表于 2015-03-02 19:49 回复此评论
    思路完全本人python代码 实现的 http://my.oschina.net/pythonpeixun/blog/377397

    还有简单的方法:就是用数字计算来确认输赢。

    大家自己写写吧。
  • 2楼:首席执行官机器人 发表于 2015-03-03 08:58 回复此评论
    这个,,,怎么能让计算机赢的更多呢
  • 3楼:黄哥Python培训 发表于 2015-03-03 09:15 回复此评论

    引用来自“superman_msc”的评论

    这个,,,怎么能让计算机赢的更多呢
    这个只是小练习题,有一所大学,专门研究剪刀石头布的 问题。
  • 4楼:首席执行官机器人 发表于 2015-03-03 10:27 回复此评论
    偶服了那个大学,不过貌似真有些研究头
  • 5楼:geek_monkey 发表于 2015-03-04 09:10 回复此评论
    有个BUG,用户输入的非“石头剪刀布”字符串,直接判定用户赢
  • 6楼:黄哥Python培训 发表于 2015-03-04 10:02 回复此评论

    引用来自“geek_monkey”的评论

    有个BUG,用户输入的非“石头剪刀布”字符串,直接判定用户赢
    对,是有这个问题。
  • 7楼:黄哥Python培训 发表于 2015-03-04 10:05 回复此评论

    引用来自“geek_monkey”的评论

    有个BUG,用户输入的非“石头剪刀布”字符串,直接判定用户赢
    小习题,暂时没有搞那么复杂。
  • 8楼:geek_monkey 发表于 2015-03-04 13:06 回复此评论

    引用来自“geek_monkey”的评论

    有个BUG,用户输入的非“石头剪刀布”字符串,直接判定用户赢

    引用来自“python培训_黄哥”的评论

    小习题,暂时没有搞那么复杂。
    嗯,感谢您的分享
  • 9楼:稻谷 发表于 2015-03-06 11:29 回复此评论
    打了一手好广告
  • 10楼:黄哥Python培训 发表于 2015-03-06 12:23 回复此评论

    引用来自“Dgoo”的评论

    打了一手好广告
    谢谢关注!主要是分享,才几百个阅读量,你说的情况,效果几乎不用考虑。
  • 11楼:florajun1314 发表于 2015-03-08 23:58 回复此评论
    内存泄漏了……楼主用python的那套来写c语言.....内存要自己管理的哦……
  • 12楼:florajun1314 发表于 2015-03-09 00:00 回复此评论

    逻辑上我觉得完全可以转换为数值之间的比较……
  • 13楼:黄哥Python培训 发表于 2015-03-09 12:03 回复此评论

    引用来自“florajun1314”的评论


    逻辑上我觉得完全可以转换为数值之间的比较……
    对!还有简单的方法:就是用数字计算来确认输赢。
  • 14楼:黄哥Python培训 发表于 2015-03-09 12:06 回复此评论

    引用来自“florajun1314”的评论

    内存泄漏了……楼主用python的那套来写c语言.....内存要自己管理的哦……
    请问你用的啥环境编译的,我的mac + gcc 或mac +clang 你说的内存管理有考虑,请细看代码。
  • 15楼:Rickl 发表于 2015-03-09 12:56 回复此评论
    1 剪刀 2 石头 3 布
    (a - b + 1) % 3 - 1 
    -1 a 输 
    0 平局
    1 a 赢

    -------------------
    楼主,你的代码真没内存泄露么?
  • 16楼:黄哥Python培训 发表于 2015-03-09 19:50 回复此评论
    准备用valgrind 查查。
  • 17楼:黄哥Python培训 发表于 2015-03-09 21:37 回复此评论
    代码修改了一下 用valgrind  没有发现错误!

    ==1947== LEAK SUMMARY:
    ==1947==    definitely lost: 0 bytes in 0 blocks
    ==1947==    indirectly lost: 0 bytes in 0 blocks
    ==1947==      possibly lost: 0 bytes in 0 blocks
    ==1947==    still reachable: 8,192 bytes in 2 blocks
    ==1947==         suppressed: 34,957 bytes in 425 blocks
    ==1947==
    ==1947== For counts of detected and suppressed errors, rerun with: -v
    ==1947== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 17)
开源从代码分享开始 分享代码
黄哥Python培训的其它代码 全部(23)...