c#实现猜数字算法,对所有CASE能在10步内求得其解

52个C语言练习:从基础语法到内存管理的系统训练指南 C语言作为系统编程和底层开发的基石,其核心在于对计算机内存模型和运行机制的深刻理解。通过指针、内存管理等概念,开发者能够直接操作硬件资源,实现高效的程序控制。掌握这些原理不仅有助于编写高性能代码,更是学习操作系统、嵌入式开发等领域的关键前提。在实际应用中,从数据结构实现到文件系统操作,都离不开扎实的C语言功底。本文围绕C语言学习中的常见痛点,通过一系列精心设计的练习,系统覆盖变量、数组、函数、指针及动态内存分配等核心主题,并结合GCC编译器环境配置和调试技巧,帮助读者构建完整的知识体系。文中重点解析了指针运 阅读详情

算法:采用逐步缩小状态空间法,首先找出4个正确的数(位置不管),然后再确定其位置,对下一个测试的4个数字采用估价函数选取值最大的一个状态,这样状态空间缩小的很快,估价函数是该状态当未被排除时其参考的状态的 A的个数加B的个数,下面是全部程序,测试代码:(每一个CASE是随机产生的)

           Cmain2 C = new Cmain2();
            C.Search();

           程序:(代码比较乱,思路不乱) 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace 猜数字
{
    
public class CCase
    
{
        
public int[] Case;
        
public int value;
        
public int A;
        
public int B;
    }

    
public class myReverserClass : IComparer
    
{
        
int IComparer.Compare(Object x, Object y)
        
{
            
return ((new CaseInsensitiveComparer()).Compare(((CCase)y).value, ((CCase)x).value));
        }

    }

    
public class myReverserClass1 : IComparer
    
{
        
int IComparer.Compare(Object x, Object y)
        
{
            
return ((new CaseInsensitiveComparer()).Compare(((CCase)x).A, ((CCase)y).A));
        }

    }

    
public class Cmain2
    
{
        CCase CMyCase;
        
public CCase Answer;
        ArrayList RightAr 
= new ArrayList();
        ArrayList CaseAr 
= new ArrayList();
        ArrayList ACase 
= new ArrayList();
        
public void Init()
        
{
            
for (int i = 0; i < 10; i++)
            
{
                
for (int j = i + 1; j < 10; j++)
                
{
                    
for (int k = j + 1; k < 10; k++)
                    
{
                        
for (int l = k + 1; l < 10; l++)
                        
{
                            CCase MyCase 
= new CCase();
                            MyCase.Case 
= new int[4] { i, j, k, l };
                            CaseAr.Add(MyCase);
                        }

                    }

                }

            }

            CMyCase 
= (CCase)CaseAr[0];
            CreateAnswer();
            
        }

        
public Cmain2()
        
{
            Init();            
        }
        
        
/// <summary>
        
/// 搜索正确数字
        
/// </summary>

        public void Search()
        
{
            Console.WriteLine(
"随机生成的 4 个数字:  " + Answer.Case[0] + " " + Answer.Case[1] + " " + Answer.Case[2] + " " + Answer.Case[3] + " 下面开始模拟猜数字:  ");
            
//Answer.Case=new int[4]{9,6,4,3};
            while ((CMyCase.A + CMyCase.B != 4) && CaseAr.Count >1)
            
{
                
//Thread.Sleep(1000);
                CreateNextCase();
            }

            Console.WriteLine(
" 已找到满意解,继续寻找最优解: ");
            GetTheRightAnswer();
            Console.WriteLine(
"找到了答案: " + CMyCase.Case[0] + " " + CMyCase.Case[1] + " " + CMyCase.Case[2] + " " + CMyCase.Case[3] + " ");
            Console.WriteLine(
"共进行了 " + ACase.Count + " 次CASE");
        }

        
/// <summary>
        
/// 产生下一用于测试的4数字
        
/// </summary>

        public void CreateNextCase()
        
{
            ACase.Add(CMyCase);
            CheckAnwser();
            Console.WriteLine(
"CASE " + ACase.Count + ":   " + CMyCase.Case[0] + " " + CMyCase.Case[1] + " " + CMyCase.Case[2] + " " + CMyCase.Case[3] + " 测试结果:" + CMyCase.A + "A" + CMyCase.B + "B");           
            CaseAr.Remove(CMyCase);
            ClearCaseAr();
            Console.WriteLine(
"剩下的状态空间数 :" + CaseAr.Count + " ");
            
if (CaseAr.Count <=1)
            
{
                
if (CaseAr.Count==1)
                    CMyCase 
= (CCase)CaseAr[0];
                
return;
            }
             
            CMyCase 
= (CCase)CaseAr[0];

        }

        
/// <summary>
        
/// 逐步缩小状态空间
        
/// </summary>

        public void ClearCaseAr()
        
{
            
int value = CMyCase.value;
            
for (int i = 0; i < CaseAr.Count; )
            
{
                
int count = 0;
                CCase ccase 
= ((CCase)CaseAr[i]);
                
for (int j = 0; j < 4; j++)
                
{
                    
for (int k = 0; k < 4; k++)
                    
{
                        
if (CMyCase.Case[j] == ccase.Case[k])
                            count
++;
                    }

                }

                
if (count != value)
                
{
                    CaseAr.RemoveAt(i);
                }

                
else
                
{
                    ccase.value 
= value;
                    i
++;
                }

            }

            myReverserClass cmp 
= new myReverserClass();
            CaseAr.Sort(cmp);
        }

        
/// <summary>
        
/// 随即产生要猜的CASE
        
/// </summary>

        public void CreateAnswer()
        
{
            Answer 
= new CCase();
            Answer.Case 
= new int[4] { -1, -1, -1, -1 };
            Random R 
= new Random();
            
int j = 0;
            
while (j < 4)
            
{
                
bool AllowNumber = true;
                
int a = R.Next(10);
                
for (int i = 0; i < 4; i++)
                
{
                    
if (Answer.Case[i] == a)
                    
{
                        AllowNumber 
= false;
                        
break;
                    }

                }

                
if (AllowNumber)
                
{
                    Answer.Case[j
++] = a;
                }

            }


        }

        
/// <summary>
        
/// 输入4个数字后检查状态为XAXB
        
/// </summary>
        
/// <returns></returns>

        public bool CheckAnwser()
        
{
            
int A = 0;
            
int B = 0;
            
for (int i = 0; i < 4; i++)
            
{
                
if (CMyCase.Case[i] == Answer.Case[i])
                
{
                    A
++;
                }

            }

            
for (int i = 0; i < 4; i++)
            
{
                
for (int j = 0; j < 4; j++)
                
{
                    
if (CMyCase.Case[j] == Answer.Case[i] && i != j)
                    
{
                        B
++;
                    }

                }

            }

            CMyCase.A 
= A;
            CMyCase.B 
= B;
            CMyCase.value 
= A + B;
            
if (A == 4)
                
return true;
            
else
                
return false;
        }
     
        
/// <summary>
        
/// 当找到4个数字后(顺序好没定)确定4个数3的顺序
        
/// </summary>

        public void GetTheRightAnswer()
        
{
            CCase TCMYCASE 
= new CCase();
            TCMYCASE.Case 
= new int[4];
            
for (int i = 0; i < 4; i++)
            
{
                TCMYCASE.Case[i] 
= CMyCase.Case[i];
            }

            TCMYCASE.A 
= CMyCase.A;
            TCMYCASE.B 
= CMyCase.B;
              
            
for (int i = 0; i < 4; i++)
            
{
                
for (int j = 0; j < 4; j++)
                
{
                    
if (j == i)
                    
{
                        
continue;
                    }

                    
for (int k = 0; k < 4; k++)
                    
{
                        
if (i == k || k == j)
                        
{
                            
continue;
                        }

                        CCase cCase 
= new CCase();
                        cCase.Case 
= new int[4] { TCMYCASE.Case[i], TCMYCASE.Case[j], TCMYCASE.Case[k], TCMYCASE.Case[6 - i - k - j] };
                        
if (IsGood(cCase))
                        
{
                            CMyCase 
= cCase;
                            
bool IsA = CheckAnwser();
                            Console.WriteLine(
"CASE: " + CMyCase.Case[0] + " " + CMyCase.Case[1] + " " + CMyCase.Case[2] + " " + CMyCase.Case[3] + " 测试结果:" + CMyCase.A + "A" + CMyCase.B + "B ");
                            ACase.Add(CMyCase);
                            
if (IsA)
                            
{
                                
return;
                            }

                                                
                        }

                        
                    }

                }

            }

        }

        
/// <summary>
        
/// 对当前的解看是否满足以前尝试的数字
        
/// </summary>
        
/// <param name="cCase"></param>
        
/// <returns></returns>

        public bool IsGood(CCase cCase)
        
{            
            
bool isGood = true;
            
foreach (CCase TcCase in ACase)
            
{
                
int A = 0;
                
for(int i=0;i<4;i++)
                
{
                    
if (TcCase.Case[i] == cCase.Case[i])
                        A
++;
                }

                
if (A != TcCase.A)
                
{
                    isGood 
= false;
                    
break;
                }

            }

            
return isGood;
        }

    }

}

C语言从零到实战:系统化学习路径与编程思维培养指南 编程语言是计算机科学的基础,其核心在于通过语法规则和数据结构实现对计算机硬件的有效控制与资源管理。在众多编程语言中,C语言以其贴近硬件、执行效率高和内存控制精细的特点,成为理解计算机底层原理和培养严谨编程思维的关键工具。其技术价值在于,通过直接操作内存(指针)和手动管理资源,开发者能够深入理解程序在计算机中的实际运行机制,这是学习高级语言难以获得的底层视角。这种能力在操作系统、嵌入式系统、编译器和高性能计算等对效率和硬件控制要求极高的应用场景中至关重要。本文围绕C语言学习,系统梳理了从环境搭建、核心语法到指 阅读详情

相关推荐

猜数字 算法

猜数字 算法 系统自动产生一个0-100之间的数,用户可以进行猜测,代码简单易懂。

leetcode刷题:299. 猜数字游戏

题目 你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下: 写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示: 猜测数字中有多少位属于数字和确切位置都猜对了(称为 “Bulls”, 公牛), 有多少位属于数字猜对了但是位置不对(称为 “Cows”, 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。 给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。 提示的格式为 “

weixin_43795179的博客 2904

C#实现关联规则算法

用C#实现关联规则算法,进行数据挖掘 不限制事务数据和1项集的数量,计算深度为3,变换深度值请修改254行循环中变量K的值--

99%的人都不知道,“猜数字”游戏这么玩才能快速胜出

大家知道“猜数字”这个游戏吗?顾名思义就是一个人想一个数字,另一个人猜。这个游戏简单又有趣,小编小时候很喜欢玩。游戏开始了!小伙伴从1~100中任选一个数字记在心里让我猜,我每猜一个数字,他只能说小了、大了或对了。直到我猜到数字,游戏结束。那时的我比较笨,总是从 1 开始依次往上猜……1,小了。那就是 2,2 也小。那就是 3……就这样一个一个猜测数字花费了很长时间。如果他定的数字是 99,那...

图灵教育 9877

vs2015下C#控制台项目猜数字游戏;可支持4;5;6位等,自己随意改位数;

使用C#语言开发,电脑生成n位不重复0-9数字;玩家猜测,提示正确个数以及正确位置的个数;完整项目的压缩文件

C#简单实现凯撒密码算法

C#简单实现凯撒密码算法,密码推荐只用数字,过大的话可能长时间程序不能响应。 初次使用c#,做得不好,还望高手指教。

【leetcode】dp---中等(1)***375. 猜数字大小 II_dp最差下最优解_min(max())(2)376. 摆动序列_dp分类(3)*377. 组合总和 Ⅳ_dp背包问题集合

375、我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例: n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。 第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块。 第三轮: 你猜是9,我告诉你.

LanXinYue98的博客 409

C#猜数字游戏代码

C#简单实例。猜数字小游戏。C#入门参考

用c#完成猜数字游戏

给定一个0-100的随机数字猜其大小 题目样式: 电脑产生一个0到100之间的随机数字,并且要求用户来猜,如果用户猜的数字比这个数字大,电脑会提示“太大”,否则提示“太小”,当用户正好猜中,电脑会提示“恭喜你猜对了,这个数是·······”。在用户每次猜测之后,程序会输出是用户第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户输入无效。 提示: 产生0到100之间的随机数字可以用以下语句;...

cx_fd520的博客 2986

如何获取SAP BTP账户及BAS启用

返回到 Service Marketplace 点击SAP Business Application Studio 然后go to Application。进入子用户的OverView里面找到Entitlements添加SAP Business Application Studio。注意:在选购BTP免费环境的时候,使用人要选公司才可以成功。在完成上述操作后,就可以登陆Cockpit。这里有SAP官方的BTP试用的手顺链接。配置权限※我绑定的是登录时的邮箱。※过程中有问题可以在评论区讨论。

wangshulong2013的博客 723

课设报告-超市收银系统 javaweb(附源代码)

超市收银系统由收银员输入顾客的会员卡卡号(若有卡),所购买的货号。从数据库中取出有关价格信息,在把这些信息返回给收银台,同时把收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库存储以供查询。另外,对没有卡的消费不记录该顾客的消费情况扥个人信息,如果一个未持卡顾客一次购买满200元,可围棋发放一张会员卡,以后在该商场购物可享受9折优惠。

m0_71106830的博客 2975

C#控制台应用实战:从零构建猜数字游戏,掌握核心编程逻辑

在编程学习过程中,理解基础概念并将其应用于实际项目是关键一步。控制台应用程序作为C#入门的经典场景,能够帮助开发者聚焦于核心逻辑的实现,避免被复杂界面干扰。通过随机数生成、用户输入处理、循环控制与条件判断等基础技术的组合,可以构建出功能完整的小型项目,从而深入理解从需求分析到代码实现的完整开发流程。本文以猜数字游戏为例,详细拆解了如何利用C#基础语法实现一个健壮的控制台应用,涵盖了随机数生成的最佳实践、用户输入的鲁棒性验证以及游戏循环的逻辑设计,为初学者提供了一个将理论知识转化为动手能力的典型范例。

weixin_34343000的博客 431

电子取证之服务器取证思路

服务器取证是一个技术性很强的领域,涉及到多个环节,包括网站重构、网站代码分析、容器分析等。数据库密码的获取通常通过查看配置文件、日志文件、备份等途径,同时可以通过一些绕过技术如禁用身份验证来获取权限。对于不同的数据库,需要根据其特性采取相应的应对方法和命令。

2401_84830066的博客 2490

程序设计基础:从语法到计算思维的实战指南

程序设计基础不仅是学习编程语言的语法,更是培养计算思维的过程。计算思维包含问题分解、模式识别、抽象和算法设计等核心能力,它教会我们如何将复杂问题转化为计算机可执行的逻辑步骤。理解变量、数据类型、控制流等基础概念,掌握数组、链表等数据结构,以及学会使用函数进行模块化设计,是构建高质量代码的基石。这些基础能力决定了代码的健壮性、可维护性以及学习新技术的效率。本文通过解析变量与数据类型、程序控制流、函数与模块化等核心概念,并结合数组、链表等数据结构的应用场景,帮助开发者夯实基础,避免常见陷阱,从而在Java、Py

385

不用写代码!用AIStarter 5.0.0离线包部署InfiniteTalk的完整指南(Windows/Mac/Linux全平台)

本文详细介绍了如何使用AIStarter 5.0.0离线包在Windows、Mac和Linux平台上零代码部署InfiniteTalk数字人。从环境准备、离线资源获取与验证,到全平台部署实操指南,提供了完整的本地化安装流程和优化建议,帮助用户快速实现AI项目的一键部署。

weixin_30275415的博客 274

【OpenCV-Python】图像的载入、显示和输出(imread()、imshow()、waitKey()、namedWindow()、imwrite())

图像的载入:imread()函数 imread()函数可以用来非常便捷地读取文件中的图片到Opencv中。这个函数一般需要两个参数: (1)载入图片的路径名。如果图像文件在工程文件夹下,可以直接用文件名读取,如“cat.jpg”,否则需要输入完整的访问路径,如“D:\\test\\lena.png”。这里还有几个tips: imread函数中,一个点代表省略当前文件夹路径,两个点则代表回...

M&Q的博客 1397

C语言零基础入门:从环境搭建到第一个Hello World程序

编程语言是计算机科学的基础,而C语言作为一门经典且强大的系统级语言,其核心在于理解代码如何被编译和执行。编译器(如GCC)充当了代码与机器指令之间的翻译官,将高级语言转换为计算机可执行的二进制文件。掌握这一原理,不仅能帮助开发者理解程序运行的底层机制,还能为后续学习更复杂的概念(如指针、内存管理)奠定坚实基础。在工程实践中,搭建一个稳定高效的开发环境是第一步,这通常涉及配置编译器、代码编辑器(如VS Code)以及设置系统环境变量。对于初学者而言,成功编写、编译并运行第一个C程序(如经典的“Hello, W

weixin_30432579的博客 457

(四)C++自制植物大战僵尸游戏启动流程

鼠标左键单机VS2022上方工具栏中进行项目启动。第一次启动项目需要编译项目中所有代码文件,编译生成需要一定的时间。不同性能的电脑需要消耗的时间差别可能较大,通常在几分钟到几十分钟之间。编译成功后会自动启动运行游戏。qi编译成功后自动启动运行游戏如下图。

尔灵尔亿的博客 2466

C语言从入门到精通:系统学习路径与核心概念全解析

编程语言是连接人类逻辑与计算机硬件的桥梁,其核心在于将算法和数据结构转化为机器可执行的指令。C语言作为一种通用、过程式的编程语言,以其接近硬件底层的特性和高效的执行效率,成为理解计算机工作原理的基石。其技术价值在于能够直接操作内存、管理硬件资源,培养开发者严谨的编程思维和系统级视角。在应用场景上,C语言广泛应用于操作系统内核、嵌入式系统、编译器、数据库以及高性能计算等对效率和可控性要求极高的领域。本文聚焦于C语言的核心概念,如指针和内存管理,通过系统化的学习路径和实战项目,帮助读者构建坚实的知识体系,并掌握

weixin_33778544的博客 363

数学史学习资料:史前数学

著名物理学家伽莫夫(宇宙大爆炸理论以及核聚变理论的提出者)在他的科普书《从1到无穷大》中举了这样一个例子。两个原始部落的酋长比赛,看谁说的数字大。第一个酋长说了三,第二个酋长想了半天,然后说你赢了。你今天听起来觉得这两个人真可笑,至少说出四,岂不就赢了?但是对这两位酋长来讲,所拥有的东西就很少超过三个,比三个多的东西他们就觉得没有必要数清楚了,就用许多来形容了。也就是说,他们生活的环境限制了他们的认知。

howard2005的专栏 902

基于Python的IMF经济数据爬取与分析:从入门到实战

本文详细介绍了如何使用Python爬取国际货币基金组织(IMF)的经济数据,包括最新的爬虫技术、反反爬策略、数据解析与存储方法。文章从IMF数据源分析开始,逐步讲解如何构建一个完整的爬虫系统,并提供了详细的代码实现和优化建议。通过本文,读者将掌握爬取复杂国际组织数据的关键技术,并能将这些技术应用于其他类似的数据获取场景。关键词:Python爬虫、IMF数据、经济数据获取、数据清洗、反爬策略IMF Data (data.imf.org) - 主要数据门户。

2201_76125261的博客 1439

C 语言学习笔记

B站up Micro_Frank C语言大师系列课程笔记

g_c_m_g的博客 1224

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C#线程,猜数字游戏

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading;//引入线程命名空间 namespace 猜数字游戏 { //2.猜数字:每10秒发一道题,题目回答正确直接进...

长风居士的博客 761

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

leetcode 21天打卡 17 猜数字大小

要求: 我们正在玩一个猜数游戏,游戏规则如下: 我从1到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。 每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。如果你花光了钱,就会 输掉游戏 。 给你一个特定的数字 n ,返回能够 确保你获胜 的最小现金数,不管我选择那个数字 。 代码: class Solution(object): def g..

just_so_so6的博客 2411

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

文曲星猜数字游戏6步算法(含代码)

此文纯属个人爱好,不具任何可推广性,慎入,欢迎玩。 这是一个比较经典的益智游戏,叫做猜数字,很多人从小都在文曲星里玩过这游戏。 游戏规则:文曲星内部会产生四个不同的有序的一位数(1-9),我们对这四个数字进行猜测,每次猜测四个数字(包括了顺序),文曲星会返回A,B两个值,A代表我们猜的数字中正确数字的个数,B代表猜的数字中不仅正确而且处于正确位置上的数字的个数。如文曲星内部产生的是432...

weixin_33906657的博客 1572

C#猜数字游戏

效果如图: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;

a716121的专栏 7114
上一篇: C#实现八数码的IDEA*(迭代加深A*)算法
下一篇: 个性新闻自动采集系统
qw_study
博客等级 码龄20年 52粉丝 27原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值