C语言百日刷题第六天

news2024/11/28 14:51:08

C语言百日刷题第六天

      • 51.鸡兔同笼问题
      • 52.输出所有形如aabb的完全平方数
      • 53.3n+1问题
      • 54.输出100~999的所有水仙花数
      • 55.韩信点兵
      • 56.倒三角形
      • 57.求子序列的和
      • 58.分数化小数
      • 59.开灯问题
      • 60.蛇形填数

51.鸡兔同笼问题

在这里插入图片描述
分析:小学生数学问题。设鸡为a个,兔为b个,建立二元一次方程组:
可以解的: a=(4n-m)/2, b=n-a。
但是要考虑无解的情况。当解出的a,b是小于0或者腿数位奇数的时候是不符合实际情况的。

#include<stdio.h>
int main()
{
	int n, m;
	int a = 0;
	int b = 0;
	scanf("%d %d", &n, &m);
	a = (4 * n - m) / 2;
	b = n - a;
	if (m % 2 == 1 || a < 0 || b < 0)
		printf("No answer\n");
	else
		printf("%d %d", a, b);
	return 0;
}

52.输出所有形如aabb的完全平方数

在这里插入图片描述
判断一个数是不是完全平方数的方法?
方法一:

int m = floor(sqort(n)+0.5);//n是需要判断的数
if(m*m==n)
	printf("是完全平方数");

在这里插入图片描述
为什么要加个0.5?

以为在大量计算的时候,可能会发生误差,由于误差可能会使1变为0.99999999999999999,但是floor会使0.9999999999的结果为0。为了不让这种情况发生,我们加上0.5,改为四舍五入。这样就可以避免以上的情况发生。

根据方法一写出的代码:

#include<stdio.h>
#include<math.h>

int main()
{
	for (int i = 1; i <= 9; i++)
	{
		for (int j = 0; j <= 9; j++)
		{
			int n = i * 1100 + j * 11;
			int m = floor(sqrt(n) + 0.5);
			if (m * m == n)
				printf("%d是完全平方数\n",n);
		}
	}
	return 0;
}

方法二:

int a = n/100;//n是需要判断的数,n/100就是前两位的数字
int b = n%100;//n%100就是后两位数字
if(a/10==a%10&&b/10==b%10)
	printf("是完全平方数");

根据方法二写出的代码:

#include<stdio.h>
int main()
{
	for (int i = 1; ; i++)
	{
		int n = i * i;
		if (n < 1000)
			continue;
		if (n > 9999)
			break;
		int a = n / 100;
		int b = n % 100;
		if (a / 10 == a % 10 && b / 10 == b % 10)
			printf("%d是完全平方数",n);
	}
	return 0;
}

53.3n+1问题

在这里插入图片描述

#include<stdio.h>
int main()
{
	long long n = 0;
	int count = 0;
	scanf("%lld", &n);
	while (1)
	{
		if (n % 2 == 1)
		{
			if (n == 1)
				break;
			else
			{
				n = 3 * n + 1;
				count++;
			}
		}
		else
		{
			if (n == 1)
				break;
			else
			{
				n = n / 2;;
				count++;
			}
		}

	}
	printf("%d\n", count);
	return 0;
}

54.输出100~999的所有水仙花数

在这里插入图片描述

#include<stdio.h>
int main()
{
	for (int i = 100; i < 1000; i++)
	{
		int a = i / 100;
		int b = (i / 10)%10;
		int c = i % 10;
		if (i == a * a * a + b * b * b + c * c * c)
			printf("%d\n",i);
	}
	return 0;
}

55.韩信点兵

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
int main()
{
	int  a, b, c;
	int sum = 0;
	scanf("%d%d%d", &a, &b, &c);
	for (int i = 10; i <= 100; i++)
		if (i % 3 == a && i % 5 == b && i % 7 == c)
		{
			sum = i;
			break;
		}
	if (sum < 0)
	{
		printf("No answer\n");
	}
	else
	{
		printf("%d\n", sum);
	}
	return 0;
}

56.倒三角形

在这里插入图片描述

#include <stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= i - 1; j++)
			printf(" ");
		for (int k = 1; k <= n - i + 1; k++)
			printf("# ");
		printf("\n");
	}
	return 0;
}

57.求子序列的和

在这里插入图片描述

#include<stdio.h>
int main()
{
	int n,m,i,k=0;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		double sum=0;
		if(n==0&&m==0)
		{
			break;
		}
		for(i=n;i<=m;i++)
		{
			sum=sum+(1.0/i)/i;//换成i*i会有运算结果溢出//
		}
		k++;
		printf("Case %d: %.5lf\n",k,sum);
	}
	return 0;
}

58.分数化小数

在这里插入图片描述

#include<stdio.h> 
int main()
{
	int a,b,c,s=0;
	double m; 
	while(scanf("%d%d%d",&a,&b,&c)!=EOF)
	{
		if(a==0&&b==0&&c==0)
		{
			break;
		}
		m=1.0*a/b;
		s++;
		printf("Case %d: %.*f",s,c,m); 
	}
	return 0;
} 

printf(“% * . * lf\n”, a, b, c); 会输出a个字宽保留b位小数的浮点数运算结果c。

该解法会出现精度问题,所有使用下面的数学解法。

#include <stdio.h>

int main()
{
    int a, b, c, ct = 1;
    while(3 == scanf("%d%d%d", &a, &b, &c))
    {
        if(0 == a && 0 == b && 0 == c) break;
        int integer = a / b;                        // 获得整数部分
        printf("Case %d: %d.", ct++, integer);
        a %= b;         // 获得余数
        int i = 1;
        // 进行c-1次模数学拟除法求出小数点后c-1位,因为要四舍五入,所以最后一位单独处理
        while(i++ < c)
        {
            a *= 10;
            printf("%d", a / b);
            a %= b;
        }
        a *= 10;
        // 判断最后一位的下一位是否大于5,进行四舍五入
        printf("%d\n", ((a % b) * 10 / b > 5) ? (a / b + 1) : (a / b));
    }
    return 0;
}

59.开灯问题

在这里插入图片描述

#include<stdio.h>
#include<string.h>
#define maxn 1010
int a[maxn];
int main()
{
	int n, k, first = 1;
	memset(a, 0, sizeof(a));
	scanf("%d%d", &n, &k);
	for (int i = 1; i <= k; i++)
		for (int j = 1; j <= n; j++)
			if (j % i == 0) a[j] = !a[j];
	for (int i = 1; i <= n; i++)
		if (a[i]) 
		{ 
			if (first) 
				first = 0; 
			else 
				printf(" "); 
			printf("%d", i); 
		}
	printf("\n");
	return 0;
}

在这里插入图片描述

“memset(a,0,sizeof(a))”的作用是把数组a清零,它也在string.h中定义。虽然也能
用for循环完成相同的任务,但是用memset又方便又快捷。另一个技巧在输出:为了避免输出
多余空格,设置了一个标志变量first,可以表示当前要输出的变量是否为第一个。第一个变 量前不应有空格,但其他变量都有。

60.蛇形填数

在这里插入图片描述
解法一:

#include<stdio.h>
#include<string.h>
#define maxn 20
int a[maxn][maxn];
int main()
{
int n, x, y, tot = 0;
scanf("%d", &n);
memset(a, 0, sizeof(a));
tot = a[x=0][y=n-1] = 1;
while(tot < n*n)
{
while(x+1<n && !a[x+1][y]) a[++x][y] = ++tot;
while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++tot;
while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++tot;
while(y+1<n && !a[x][y+1]) a[x][++y] = ++tot;
}
for(x = 0; x < n; x++)
{
for(y = 0; y < n; y++) printf("%3d", a[x][y]);
printf("\n");
}
return 0;
}

解法二:

#include<stdio.h>
int a[100][100],book[100][100];
int main()
{
    int n,i,j,step=2,x=0,y=0,tx,ty;
    int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//右,下,左,上。若想要输出逆时针蛇行填数,只需要改变几个坐标顺序就好了
    scanf("%d",&n);
    a[0][0]=1;//把第一个数保存下来
    book[0][0]=1;//把第一个数标记,防止重复使用
    for(i=0;i<4;)
    {
          tx=x+next[i][0];//从第二个点开始
          ty=y+next[i][1];
          if(ty>n-1||tx>n-1||book[tx][ty]==1||ty<0)/*先让这个人一直沿右走,直到它的众坐标,或者横坐标大于这个矩阵的边界值,或者小于边界值,再或者这个点已经走过了,此时要改变方向*/
          {
              i++;//改变方向
              if(i==4)//需要判断是否已经走过一圈了,如果走到一圈后,i要赋值为零再从新按顺时针走一圈
              {
                    if(step>n*n)//走完一圈判断步数是否大于n*n
                    break;
                    else
                    i=0;//从新按顺时针方向走
                }
                tx=x+next[i][0];//计算改变方向后的第一个数,并标记这个点已经走过
                ty=y+next[i][1];
                a[tx][ty]=step;
                book[tx][ty]=1;
                step++;
            }    
            if(a[tx][ty]==0&&book[tx][ty]==0)//如果这个数是零,并且这个点没有走过,就留下对应的数
            {
                a[tx][ty]=step;
                book[tx][ty]=1;
                step++;
            }
            x=tx;y=ty;
            if(step>n*n)
                break;
        }

    //输出结果
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%3d ",a[i][j]);
        printf("\n");
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据技术基础实验十:Hive实验——新建Hive表

大数据技术基础实验十&#xff1a;Hive实验——新建Hive表 文章目录大数据技术基础实验十&#xff1a;Hive实验——新建Hive表一、前言二、实验目的三、实验要求四、实验原理五、实验步骤1、启动Hive2、创建表3、显示表4、显示表列5、更改表6、删除表或者列六、最后我想说一、前…

vue学习笔记——简单入门总结(三)

文章目录1.Vue的理解&#xff1a;1.1.mvvm模型&#xff1a;1.2.vue2的数据代理&#xff1a;1.3.vue2的生命周期&#xff1a;1.4.vue中的render函数&#xff1a;1.5. mixin混入&#xff1a;2.Vue组件间通信&#xff1a;2.0.props&#xff1a;2.1.全局事件总线&#xff1a;2.2.消…

WeMos Mini ESP32-S2FN4R2介绍

WeMos Mini ESP32-S2FN4R2介绍LOLIN S2 Mini V1.0.0 ESP32-S2 4MB FLASH 2MB PSRAM WIFI开发板 &#x1f33c;功能介绍 基于 ESP32-S2FN4R2TYPE-C USB27个数字输入/输出引脚&#xff0c;所有引脚都支持中断/pwm/I2C/单线ADC、DAC、I2C、SPI、UART、USB OTG &#x1f4cd; 详细…

棋盘(马蹄集)

棋盘 难度&#xff1a;白银 0时间限制&#xff1a;1秒 巴占用内存&#xff1a;64M 求一个N*N棋盘中的方块总数。 格式 输入格式&#xff1a;输入整型N 输出格式&#xff1a;输出整型 CSDN盛溪的猫 #include<bits/stdc.h> using namespace std; int main(){ long n,sum1;…

Mybatis要点总结

一、了解orm框架 1.什么是ORM框架&#xff1a;对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称ORM&#xff09;&#xff0c;该模式是为了解决面向对象与关系数据库互补匹配的现象的技术&#xff1b;orm框架是连接数据库的桥梁&#xff0c;主要提供了人持久…

大数据技术之Zookeeper总结Ⅰ

zookeeper总结目录1. Zookeeper 入门1.1 zookeeper概述1.2 Zookeeper特点1.3 ZooKeeper 数据模型的结构2. Zookeeper 本地安装2.1 本地模式安装2.2 配置参数解读3. Zookeeper 集群操作3.1 集群操作3.2 Zookeeper 集群启动停止脚本3.3 客户端命令行语法1. Zookeeper 入门 1.1 z…

数据结构七:七大排序

目录 1&#xff1a;排序的概率 2.插入排序 2.1&#xff1a;直接插入排序-----稳定 2.1.1&#xff1a;基本思想 2.2&#xff1a;希尔排序 2.2.1&#xff1a;概念&#xff1a; 3.选择排序 3.1&#xff1a;选择排序 3.1.1&#xff1a;概念 3.2:堆排序 4.交换排序 4.1&…

微信小程序自动化测试之路

1. 前言 在每次发布新版本之前、都需要回归核心功能、已确保上线后小程序也能按照预期运行. 目前这部分回归工作是由测试同事手工去验证测试用例、按照每周一版本的迭代节奏、回归就花了测试挺多时间的. 最近前端工作比较轻松、故在思考能否把这部分重复的工作交给程序自动来进…

【EhCache: 一款Java的进程内缓存框架】EhCache 是什么、代码实战 Demo

文章目录1 EhCache 是什么2 代码实战 DemoTestEH.javaehcache.xml1 EhCache 是什么 Ehcache 是一种开源的、基于标准的缓存&#xff0c;可提高性能、卸载数据库并简化可扩展性。它是最广泛使用的基于 Java 的缓存&#xff0c;因为它健壮、经过验证、功能齐全&#xff0c;并且与…

python 基于PHP+MySQL的装修网站的设计与实现

至今为止,越来越多企业公司都已经实现了线上推广,提高了企业的运营工作效率,为装修公司设计一款强大的智能装修网,集企业信息展示和信息管理于一体,结合企业与外部的在线交流功能,主要用于大力宣传企业服务、企业产品等信息,让更多的人了解,提高企业的知名度 1&#xff1a;系统…

Spring Data Neo4j(1.对象映射)

文章目录一、Spring Data Neo4j二、注释NodeIdVersion(乐观锁)PropertyRelationship一、Spring Data Neo4j Spring Data Neo4j或简称SDN是下一代Spring Data模块&#xff0c;由Neo4j&#xff0c;Inc.创建和维护。与VMware的Spring Data Team密切合作。 它支持所有官方支持的Ne…

<Linux> shell运行原理及Linux权限的理解

文章目录一、shell 命令及其运行原理shell外壳shell运行原理二、Linux 权限的概念1.用户分类2.切换用户3.用户提权三、Linux 权限管理1.文件访问者的分类&#xff08;人&#xff09;2.文件类型和访问权限&#xff08;事物属性&#xff09;四、文件权限值的表示方法1.字符表示法…

Pycharm 配置远程SSH服务器环境(切换不同虚拟环境)

1.首先在Xshell上通过conda创建新的虚拟环境 2.此时在 /home/y210101004/.conda/envs下多了刚刚创建的环境的文件夹 3.路径说明&#xff01; &#xff08;注意&#xff01;&#xff09;该环境的编译器python3.6就在.../jiayan_test/bin里面 &#xff08;注意&#xff01;&…

04.函数

一、 函数 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, method, subprogram, callable unit&#xff09;&#xff0c;是一个大型程序中的某部分代码&#xff0c; 由一个或多个语句块组 成。它负责完成某项特定任务…

ctfshow学习记录-misc入门(图片篇-颜色通道50-59)

目录misc50misc51misc52misc53misc54misc55misc56misc57misc58misc59misc51-52的wp和脚本参考的是csdn博主&#xff1a;z.volcano 九某人的碎碎念&#xff1a;这篇一更&#xff0c;说明近期是真的没有时间写wp了。虽说好多都是之前做过的题&#xff0c;但是wp整理起来还是比较耗…

OpenCV-Python 颜色识别(红色)并拟合矫正目标区域

OpenCV版本&#xff1a;4.6.0.66 算法实现思路&#xff1a; 颜色识别(红色)形态学去噪轮廓检测多边形拟合透视矫正代码实现&#xff1a; import cv2 import numpy as np# 可视化 def img_show(name, img):cv2.namedWindow(name, 0)cv2.resizeWindow(name, 1000, 500)cv2.imsh…

Java内存模型与volatile

Java内存模型 Java内存模型Java Memory Model&#xff0c;简称JMM&#xff0c;本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范&#xff0c;通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变成对另…

白鹭群优化算法(ESOA)附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

单调区间能写成并吗?【基于间断区间的讨论】

不能。 问题 在做到一道题的时候&#xff0c;发现了两个减区间&#xff0c;于是就用并∪连接到一起了&#xff0c;但是答案是要用和连接。于是想要辨析一下这个并和和的区别。 区别 并&#xff1a;并的意思是将多个区间看成一个并起来的整体&#xff0c;在整个区间上仍然是…

按照 STAR 法则介绍自己做过的项目

大家好啊&#xff0c;我是大田 介绍项目注意两点&#xff1a;1、自己真的做过 2、逻辑表达能力 为什么推荐你用 STAR 法则说呢&#xff1f; STAR 法则是结构化面试中非常重要的理论。 面试官通过这样的描述全面了解你的测试知识、经验、技术能力的掌握程度&#xff0c;通过你发…