博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言实例 魔术师的猜牌术(1),C语言实例 魔术师的猜牌术(1)
阅读量:6469 次
发布时间:2019-06-23

本文共 940 字,大约阅读时间需要 3 分钟。

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

u6jjltfs0v

2014.05.15

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:43%    等级:12

已帮助:4849人

这个问题你想让别人一步一步帮你递推演示,要累死人的。不仅解释的人累,大段大段的无聊文字你看着都累。

很多程序题目最主要的是理解实现过程,只要过程理解了,程序自己也可以写出来。

我帮你点拨一下吧。

首先,你可以把答案打印出来,照着答案自己循环数一下,通过这个过程,把每个数字到底是怎么出来的搞明白。

数据如下:1 8 2 5 10 3 12 11 9 4 7 6 13

然后开始数:先是1;再数2个是2;再数3个是3;……;数到4要数5的时候,7(1)、6(2)、13(3)、1(跳掉)、8(4)、2(跳掉)、到了,填5;……

明白了吗?

程序中n就是刚才括号里数的东西,a[j]就是刚才数的7,6,13……(程序运行的时候这些不用跳掉的数字还没有赋值,都是0),现在应该能明白了吧。

整个do-while语句内实现的就是刚才数的过程,j碰到结尾就从头开始。j碰到需要跳掉的时候就j++,否则就j++;n++,直到n==i。

补充一些基础知识:

(1)全局变量int a[14];运行前全部是0。

(2)if(a[j]),0的话就是false,赋过值了就是true。

其实这个程序写得不是非常有条理(不过执行效率不错),初学者读起来有点困难。想方便阅读的话,可以让n从0开始。n++以后再判断n==i。我帮你写个可读性强点的程序吧,读完我的再读他的,应该方便很多。

#include<stdio.h>

int a[14]={0};//显式地赋0值

int main()

{

int i,n,j=1;

printf("The original order of cards is:");

for(i=1;i<=13;i++)

{

n=0;

while(n!=i){//换成do-while也一样

if(a[j]==0){//如果位置空,n就计数

n++;

if(n==i)//到了,赋值

a[j]=i;

}

j=j==13?1:j+1;//j一直计数

}

}

for(i=1;i<=13;i++)

printf("%d ",a[i]);

printf("\n");

}

00分享举报

转载地址:http://vxdko.baihongyu.com/

你可能感兴趣的文章
Q:图像太大,在opencv上显示不完全
查看>>
利用ItextPdf、core-renderer-R8 来生成PDF
查看>>
NavigationController的使用
查看>>
多线程编程之Windows环境下创建新线程
查看>>
Unity3D NGUI 给button按钮添加单间事件
查看>>
密码的校验.大小写字母,数字,特殊字符中的至少3种
查看>>
ios 不同sdk4.3 6.0版本号,关于方法的兼容性的通用方法
查看>>
js滚动加载到底部
查看>>
Virtualbox 虚拟机网络不通
查看>>
memcache数据库和redis数据库的区别(理论)
查看>>
我的友情链接
查看>>
MyBatis+Spring结合
查看>>
Office 365之SkyDrive Pro
查看>>
Java Web 高性能开发
查看>>
初识Scala反射
查看>>
第三十九天
查看>>
Redis详解
查看>>
论程序员加班的害处
查看>>
codeblocks快捷键
查看>>
基于HTML5的WebGL设计汉诺塔3D游戏
查看>>