有意思的C编程题目

2023-11-04

有意思的C编程题目

@(有意思的编程)

1 翻扑克

有52张朴克牌,使它们全部正面朝上。从第2张牌开始,把凡是2的倍数位置上的牌翻成正面朝下;接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;接着从第4张牌开始,把凡是4的倍数位置上的牌按次此规律翻转;依此类推,直到第1张要翻的牌是第52张为止。统计最后有几张牌正面朝上,并打印出它们的位置。

#include <string.h>
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char* argv[])
{
	int a[53], i, j, k = 0;
	for (i = 1; i <= 52; i++)e
	{
		a[i] = 1;     //初始化,全部朝上
	}
	//从第二张开始翻可以和从第三张及以后开始一起处理是因为初始条件是牌全部向上,第二张要翻可以用a[j] = a[j] * (-1)处理
	for (i = 2; i <= 52; i++)  //从第二张开始。。。到52张
	{
		for (j = i; j <= 52; j++)  //从第i张开始 查询到最后一张
		{
			if (j%i == 0)				//如果是i的倍数,比如从第二张开始 j为i的倍数(此时i=2)的,牌的朝向翻转
				a[j] = a[j] * (-1);     //乘以负一,等价于牌翻转
		}
			
	}
	for (i = 1; i <= 52; i++)
	{
		if (a[i] == 1)
		{
			k++;
			printf("%d ", i);
		}
	}
		printf("总共有%d张牌正面朝上\n", k);
}

2 猴子选猴王

N只猴子选大王,选举办法如下:从头到尾1、2、3报数,凡报3的退出,余下的从尾到头1、2、3报数,凡报3退出;余下的又从头到尾报数,还是报3的退出;依此类推,当剩下的两只猴子时,取这时报数报1的为王。若想当猴王,请问当初应占据什么位置?

方法1

#include <string.h>
#include<stdio.h>
#include<stdlib.h>

typedef struct{
	int num;
	int pos;
	int flag;
}Monkey_T;

int main(int argc, char* argv[])
{
	Monkey_T monkey[150];
	int n;
	int e = 0;
	int i, j, k;
	printf("输入猴子的数量N (n<=100):\n");

	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		monkey[i].pos = i;    //初始化位置  1 - N
		monkey[i].num = 0;    //初始化报数全为0
		monkey[i].flag = 0;	  //标志是否已经被排除	
	}
	i = 1;
	j = 0;
	k = 1;
	do
	{

		if ( (i > n) || (i < 1) )   //报数到头或尾巴
		{
			j = 0;
			if (i > n)             //到头的情况
			{
				i = n;             //设置下个报数方向
				k = -1;            
			}
			else                  //到尾的情况
			{
				i = 1;
				k = 1;
			}
		}

		if (monkey[i].num != 3)
		{
			monkey[i].num = (j % 3) + 1;    //不为3的重新报数 取余3+1的结果 1,2,3
			j++;
		}
		else
		{
			if(0 == monkey[i].flag)    //未被标记排除的猴子
			{
				e++;
			}
			monkey[i].flag = 1;
		}
		i = i + k;                  // K可能等于+-1
	} while (((n - e) > 2) || (j != 2));      //直到剩下两只猴子 并且进行了新的一轮报数(i=2,只有两只) 

	for (i = 1; i <= n; i++)
	{
		if(monkey[i].num == 1)  
		{
			printf("报数为1的猴子的位置%d\n", monkey[i].pos);
		}

	}
}

方法2

#include <string.h>
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char* argv[])
{
    int a[150],n,t,i,j=0,tot=0;
	printf("输入n的值(n<=100):\n");
	scanf("%d",&n);
	for(i=1;i<=n;i++)	//i代为位置
		a[i]=1;			//初始化  为1代表未被排除
	
		t=1;				//t代表报数方向	
		for(i=1;i>=0;i=i+t) //在这个for循环中,i肯定都大于等于0 
		{
		if(i==n+1 || i==0)  //报数到尾巴或头  此判断决定for循环是跳不出去
		{
			t=t*(-1);		//排队方向变化
			i=i+t;			//使得i=n或i=1
			j=0;			//计数清0  0 - 2 (1,2,3)
		}
		if(a[i]==1)			//未被排除
			j++;			//报数 1,2,3
		if(j==3)			//报数到3 
		{
			a[i]=-1;        //标记排除
			tot++;			//记录排除猴子的数量
			j=0;            //报数清0
		}
		if(tot==n-2 && j==1)break;//如果只剩两只猴子,并且报数为1 报数为1说明是新一轮的报数 
	}printf("应占据的位置编号为%d\n",i);
}

3 狐狸找兔子

围绕着山顶有10个洞,一只狐狸和一只兔子各住一个洞。狐狸总想吃掉兔子。一天兔子对狐狸说:“你想吃我有一个条件,先把洞从1~10编上号,你从10号洞出发,先到1号洞找我;第二次隔1个洞找我,第三次隔2个洞找我,以后依此类推,次数不限。若能找到我,你就可以饱餐一顿。不过在没有找到我以前不能停下来。”狐狸满口答应就开始找了,它从早到晚找了1000次洞,累得昏了过去也没有找到兔子。请问,免子躲在几号洞里?【答案】2,4,7,9

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{
	int a[11]={0},i,j;	//a[11]全部初始化为0.为啥是11,因为只用a[1]-a[10]总共10个
	a[1]=1;				//首次先找1洞口
	i=1;				//狐狸当前位于1号洞
	for(j=2;j<=1000;j++)//从第二次到1000次
	{
		i=i+j;			//下一次寻找第位置(基于狐狸当前位置+需隔j个洞)
		if(i>10)		//因为只有10个洞,1-10
		{
			i=i%10;		//当前位置 如果i=10,就是10号洞,i=11,1号洞 以此类推
			if(i==0)	//i=10的倍数的情况,就是10号洞
				i=10;
		} 
		a[i]=1;			//当前狐狸已经寻找过的洞,标记为1
	}
	printf("安全位置为:");
	for(i=1;i<=10;i++)
	{
		if(a[i]==0)
		{
			printf("%d", i);
		}
	}
	printf("\n");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有意思的C编程题目 的相关文章

  • gcc -l参数和-L参数

    l参数和 L参数 l参数就是用来指定程序要链接的库 l参数紧接着就是库名 那么库名跟真正的库文件名有什么关系呢 就拿数学库来说 他的库名是m 他的库文件名是libm so 很容易看出 把库文件名的头lib和尾 so去掉就是库名了 好了现在我
  • C++编程——继承

    文章目录 1 继承的基本语法 2 继承方式 3 继承的对象模型 4 继承中构造和析构顺序 5 继承中同名成员处理 6 继承中同名静态成员处理方式 6 1 通过对象访问 6 2 通过类名访问 7 多继承语法 7 1 多继承的对象模型 8 菱形
  • CSDN-markdown编辑器

    欢迎使用Markdown编辑器 你好 这是你第一次使用 Markdown编辑器 所展示的欢迎页 如果你想学习如何使用Markdown编辑器 可以仔细阅读这篇文章 了解一下Markdown的基本语法知识 新的改变 我们对Markdown编辑器
  • linux通信机制signal()函数详解

    我们来谈一谈signal 函数的作用 linux系统提供了signal 和sigaction 两个函数来改变对于信号的处理方法 其中signal 是一个基于sigaction 系统调用的glibc库函数 其行为在不同的linux操作系统存在
  • Qt Creator下载和安装(详细教程)

    简介 Qt是跨平台的图形开发库 目前由Digia全资子公司 Qt Company 独立运营 官方网址 http www qt io 也可以访问Qt项目域名 http qt project org Qt本身支持众多操作系统 从通用操作系统Li
  • LFSR(线性反馈移位寄存器)的C++实现

    n级线性反馈移位寄存器 这里以n 7为例 假设初始状态为1000000 使用C 标准库中的bitset类来实现 bitset类的用法详解 点击打开链接 include
  • c 编程 常犯的错误,隐藏性很高,而且很致命

    1 申请内存 1 1 内存大小错误 比如 申请一块存放8个unsigned int 数据的内存空间 错误 malloc 8 正确 malloc 8 sizeof unsigned int 注解 malloc申请内存 是以字节为单位的 所以当
  • 位运算符(一):C/C++位运算符

    位运算是指按二进制进行的运算 在程序中 常常需要处理二进制位的问题 C C 语言提供了6个位操作运算符 这些运算符只能用于整型操作数 即只能用于带符号或无符号的char short int与long类型 在实际应用中 建议用unsigned
  • __declspec(dllimport)的理解

    declspec dllimport MSDN中说明 不使用 declspec dllimport 也能正确编译代码 但使用 declspec dllimport 使编译器可以生成更好的代码 编译器之所以能够生成更好的代码 是因为它可以确定
  • 有意思的C编程题目

    有意思的C编程题目 有意思的编程 1 翻扑克 有52张朴克牌 使它们全部正面朝上 从第2张牌开始 把凡是2的倍数位置上的牌翻成正面朝下 接着从第3张牌开始 把凡是3的倍数位置上的牌正面朝上的翻成正面朝下 正面朝下的翻成正面朝上 接着从第4张
  • 【FFmpeg学习笔记一】FFmpeg简介

    Fmpeg简介 一 FFmpeg简介 二 FFmpeg函数库 三 FFmpeg用例 四 相关链接 一 FFmpeg简介 FFmpeg是一款自由软件 核心功能就是音视频编解码 其中的 FF 指的是 Fast Forward 快速前进 FFmp
  • KEIL编译出现错误“source file is not valid utf-8”

    KEIL编译出现错误 source file is not valid utf 8 在外面复制了一段代码 c文件一直报错source file is not valid utf 8的错误 经查找原因就是 文件中出现中文符号导致的 特别是中文
  • bluez——dbus接口api

    bluez dbus接口api bluez的api接口的说明文档在 doc 路径下 我这先重点分析下adapter agent和device这几个文件 这里面包含的是常用的api 1 agent c 这里现在注册的几个dbus方法 void
  • __builtin_expect, __builtin_unreachable和__builtin_prefetch

    builtin expect 该指令是gcc引入的 就是允许代码编写者把最有可能执行的分支告诉编译器 标准写法是 bultin expect exp n 意思是exp n的概率很大 这样编译器可以对代码进行优化 减少指令跳转带来的性能下降
  • Qt与VS的对比(1)

    对话框篇 QT与VS创建对话框的方式非常相似 都需要创建一个对话框类 在需要显示该对话框的地方包含对应的头文件 显示即可 区别 QT显示模态对话框使用函数QDialog exec VS显示模态对话框使用函数CDialog DoModal Q
  • Ubuntu20安装gcc11

    Ubuntu20默认情况下没有安装gcc和g 等工具 最近学习C 20的协程编程 需要将g cc 直接升级到11 下面介绍下方法 首先 添加安装源 sudo add apt repository y ppa ubuntu toolchain
  • C# 理解Thread.Sleep()方法 (转载学习)

    我们可能经常会用到 Thread Sleep 函数来使线程挂起一段时间 那么你有没有正确的理解这个函数的用法呢 思考下面这两个问题 1 假设现在是 2008 4 7 12 00 00 000 如果我调用一下 Thread Sleep 100
  • c语言之字符串数组

    还是在写图的存储结构的时候 遇到了问题 就是如何在一个数组中存放字符串 我相信这个问题 对于面向对象的编程语言来说 轻而易举 比如对于Java来说 直接像下面就可以了 但是c语言没有String这个类型 能想到存放字符串的数据类型就是cha
  • win7安装了vc++6.0打开已保存文件项目就会崩溃

    我用win7安装了vc 6 0的英文完整版 绿色中文版 发现当运行程序时 要打开已保存文件项目就会崩溃 系统对话筐就说 Microsoft R Developer Studio已停止工作 选择调试或者关闭 office 2010 与vc 6
  • 利用VTK显示PLY网格模型文件

    define vtkRenderingCore AUTOINIT 2 vtkRenderingOpenGL2 vtkInteractionStyle include

随机推荐

  • 机器人识别抓取笔记(基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计:综述)

    Real Time Deep Learning Approach to Visual Servo Control and Grasp Detection for Autonomous Robotic Manipulation 基于视觉的机器
  • el-upload的多文件上传

    el upload实现多文件上传的方法
  • 【C++】第一章:多数据输入时的分隔问题

    在键盘输入多数据时 必须用空格键 Tab键或enter键隔开 不同数据类型的输入 按数据类型读取数据 当用enter键分隔数据时 当用空格键分隔时结果是一样的 多数据错误输入情况 当有与数据类型不匹配的数据时 用空格键分隔 按变量数据类型依
  • vue.js使用props在父子组件之间传参

    prop 组件实例的作用域是孤立的 这意味着不能 也不应该 在子组件的模板内直接引用父组件的数据 要让子组件使用父组件的数据 我们需要通过子组件的 props 选项 子组件要使用 props选项声明它期待获得的数据 官方的解释非常清晰了 两
  • vue进阶04-vue文档生成工具vuepress2

    介绍 VuePress 是一个以 Markdown 为中心的静态网站生成器 你可以使用 Markdown 来书写内容 如文档 博客等 然后 VuePress 会帮助你生成一个静态网站来展示它们 VuePress 诞生的初衷是为了支持 Vue
  • Java中的substring截取字符串方法

    1 问题描述 在处理字符串的过程中有很多情况下会遇到需要截取字符串的情况 这个时候使用Java中提供的substring方法来截取就非常方便了 2 其中比较经常使用到的方法有两个 public String substring int be
  • 安全通用要求之安全通信网络

    安全通信网络 网络架构 业务高峰期 安全要求 需要保证网络设备的业务处理能力满足高峰期的需要 要求解读 了解业务高峰的时间段 核查该时间段内设备的处理能力是否满足 测评方法 确定业务高峰期的时间段 访谈查看网管平台的统计数据 业务高峰期时间
  • 浅谈Android环境开发配置

    经过两个月的java基础学习 个人觉得在搭建开发环境配置方面 Android环境开发比Java环境开发麻烦多了 Java环境配置前面我谈过了 这里就只写写Android的环境开发 Android环境开发需要Android SDK开发包 根据
  • Midjourney V5横空出世:画出完美中国情侣 逼真得令人毛骨悚然

    雷递网 雷建平 3月20日 2023年 AI技术正在加速对人类世界的改变 在ChatGPT的升级版GPT 4横空出世 能玩梗图还能做网页之际 Midjourney V5已正式发布 该服务可以生成逼真的图像 其质量水平被一些AI艺术爱好者称为
  • es7合并数组相关 报错Uncaught (in promise) TypeError: Invalid attempt to spread non-iterable instance. In ...

    方法一 let o1 a 1 b 2 c 3 let o2 o1 d 4 o2 a 1 b 2 c 3 d let arr1 0 1 2 let arr2 arr1 3 arr2 0 1 2 3 方法二 let o1 a 1 b 2 c 3
  • Java的Iterator(迭代器)

    Java迭代器 Iterator 是 Java 集合框架中的一种机制 它提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法 Java Iterator 迭代器 不是一个集合 它是一种用于访问集合的方法 可用于迭代 ArrayList
  • 快速理解ES6的模板字面量?

    let abc 天空 hhh 大地 我们要将字符串和上述的两个变量拼接 并在后续的程序中 输出一个拼接后的字符串 传统实现方式 let testString 我们需要仰望 abc 的理想者 同样也需要脚踏 hhh 的实干派 console
  • 让合作伙伴拥有自己专属的刷脸支付品牌

    刷脸支付OEM合作模式即刷脸支付品牌定制 是行业内专业从事支付系统产品研发 在刷脸支付领域 具备强大的技术开发能力以及服务运营能力的公司 将目前成熟的产品系统框架进行品牌更换 让合作伙伴快速拥有自己专属的刷脸支付品牌 快速拓展市场 做刷脸支
  • Vue 解决路由重复 Uncaught (in promise)错误

    Holle 我是Boy 今天给大家分享一下关于 Vue 解决路由重复 Uncaught in promise 错误 的问题 话不多说直接来看 在脚手架router文件夹的index js写入 1 第一种方法 const routerPush
  • kubelet启动失败

    原因之一 是kubelet cgroup驱动程序 cgroupfs 与docker cgroup驱动程序不同 公司的k8s 新增了一个节点 但kubelet启动一直报错 无法启动 网上找了半天 发现是kubelet cgroup驱动程序 c
  • 机器学习之逻辑回归模型

    1 逻辑回归模型介绍 逻辑回归 Logistic Regression LR 又称为逻辑回归分析 是一种机器学习算法 属于分类和预测算法中的一种 主要用于解决二分类问题 逻辑回归通过历史数据的表现对未来结果发生的概率进行预测 例如 我们可以
  • openglStudySite

    http www learnopengles com android lesson one getting started
  • Python正则表达式_常用匹配方法findall

    正则匹配方法之findall 核心要点 findall 是将所有匹配到的字符 以列表的形式返回 如果未匹配 则返回空列表 一 pattern findall 方法 语法 findall string None pos 0 endpos 92
  • qt undefined reference to的原因之一

    在h文件定义的函数 参数带const 而在cpp文件中实现函数时 参数没有带const 则编译时所有调用该函数的地方会报undefined reference to错误 两者修改一致就好了 如 h文件定义的函数 void Test cons
  • 有意思的C编程题目

    有意思的C编程题目 有意思的编程 1 翻扑克 有52张朴克牌 使它们全部正面朝上 从第2张牌开始 把凡是2的倍数位置上的牌翻成正面朝下 接着从第3张牌开始 把凡是3的倍数位置上的牌正面朝上的翻成正面朝下 正面朝下的翻成正面朝上 接着从第4张