Lesson_4 作业_1 ---- 魔术师的秘密

本文通过倒推法解析了一位魔术师如何在不看牌的情况下,仅凭数数就能准确翻出13张黑桃牌的秘密。通过设置13个空盒子,模拟魔术师的数牌过程,最终揭示了牌的原始顺序。
 1 /******************************题目描述***********************************
 2 *     在一次晚会上,一位魔术师掏出一叠扑克牌,取出其中13张黑桃,预先洗好后,
 3 * 把牌面朝下,对观众说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口
 4 * 中念一,将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌上,继续数手里的余
 5 * 牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,
 6 * 也把它放在桌子上。第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张
 7 * 牌,正好是黑桃3,这样依次将13张牌翻出,准确无误。现在的问题是,魔术师手中
 8 * 牌的原始顺序是怎样的?
 9 ********************************解题思路***********************************
10 *     解决这类问题的关键在于利用倒推的方法推出原来牌的顺序。
11 *     假设桌上摆着13个空盒子,编号为1至13,将黑桃A放入第一个盒子中,从下一个
12 * 空盒子开始对空盒子计数,当数到第二个空盒子时,将黑桃2放入空盒子中,然后再
13 * 从下一个空盒子开始对空盒子计数。顺序放入3,4,5等,直到全部放入13张牌,注意
14 * 在计数时要跳过非空的盒子,只对空盒子计数,最后得到的牌在盒子中的顺序,就是
15 * 魔术师手中原来牌的顺序。
16 *
17 ********************************注释***********************************
18 *                       2012-1-14 by 樊列龙
19 ****************************************************************************/
20 
21 public class 魔术师的秘密{
22     public static void main(String []args){
23         int []poker = new int[14];
24         String []pokerStr = {"0","A","2","3","4","5","6","7","8","9","10","J","Q","K"};
25         int mem = 1;
26         int j = 1;
27         for(int i = 1; i < 14; i++){
28             int n = 0;
29             for(j = mem; n != i; j++){
30                 if (j > 13) j = 1;
31                 if(poker[j] == 0){
32                     n++;
33                 }
34             }
35             mem = j--;//这里的自减必不可少,并且只能是后置的自减
36             poker[j] = i;
37         }
38 
39 //        for(int i = 1; i < 14; i++){
40 //            System.out.print(poker[i] + " ");
41 //        }
42 //        System.out.println();
43 
44         for(int i = 1; i < 14; i++){
45             System.out.print(pokerStr[poker[i]] + " ");
46         }
47         System.out.println();
48     }
49 }

老师的程序

 1 //老师写的13-01-15
 2 public class 魔术师的秘密{
 3     public static void main(String []args){
 4         int []pokers = new int[14];//从1开始用
 5         int total = 1;//13张牌
 6         int index = 1;//当前数组的位置
 7         int count = 1;//计数器
 8 
 9 
10         for(;total != 14;){
11             if(index > pokers.length-1){
12                 index = 1;
13             }
14             if(pokers[index] == 0){//检查当前位置是否有牌
15                 if(count == total){
16                     pokers[index] = total;//放下牌
17                     count = 1;//计数器复位
18                     total++;//开始下一张牌
19                     index++;//计数器的位置后移一位
20                 } else {
21                     count++;
22                     index++;
23                 }
24             }else{
25                 index++;
26             }
27         }
28 
29         for(int i = 1; i < 14; i++){
30             System.out.print(pokers[i] + " ");
31         }
32     }
33 }

 

 

运行结果:

  

转载于:https://www.cnblogs.com/CocoonFan/archive/2013/01/15/2861642.html

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值