c刷题(三)

news2025/1/19 8:21:20

程序运行结果 

int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++;
b += a++ + c;
printf("a = %d b = %d c = %d\n", a, b, c);

line3:c=6,a=6;

line4:(逗号表达式,从左向右计算,结果为最后一个表达式)c=8,a=8,b=6(后置)

line5:a=8,c=8,+=优先级最低,先计算 a++ +c = 16,然后a自增1,b = 17 + 6 = 23。

计算二进制中1的个数

前面讲操作符的时候讲了一种计算二进制1的个数的方式,用移位操作符和位操作符进行判断,还有两种方式也可以计算二进制中1的个数。

除余法

整数除以2的本质是将操作数的二进制向右移动一位,等价于>>操作符,而%2则可以判断二进制的最后一位是否为1,因为奇数最低的二进制位必为1.(2^0)

int count_bit(unsigned int m)
{
	int count = 0;
	while (m)
	{
		if (m % 2 == 1)
			count++;
		m /= 2;
	}
	return count;
}

需要注意,计算负数需要传无符号整形,否则会导致计算不准确。 

n&(n-1)法

每进行一次n&n-1的操作都会消去一个1:
n:     10010

n-1: 10001

n&n-1: 10000

n-1:   01111

n&n-1: 00000

可以发现,我们只用了两次就得到了1的个数,通过观察,n-1会将最左边的1变成0,在进行&操作时就会将它变为0,是性能最高的方法。

int count_bit(int m)
{
	int count = 0;
	while (m)
	{ 
		m = m & (m - 1);
		count++;
	}
	return count;
}

 求两个数二进制不同的个数

移位法

移位法没什么好说的,用& , | 或^都可以比较具体二进制位是否相同。

int count_diff_bit(int m, int n)
{
	int i = 0;
	int count = 0;
	for (i = 0; i < 32; i++)
	{
		if ((m >> i) & 1 != (n >> i) & 1)
			count++;
	}
	return count;
}

异或法

相异为1,再通过刚才我们提到的n&(n-1)法可以直接计算出1的个数就是不同的个数。

int count_diff_bit(int m, int n)
{
	int count = 0;
	int ret = m ^ n;
	while (ret)
	{
		ret = ret & (ret - 1);
		count++;
	}
	return count;
}

相同怎么办?32减去1的个数就行了呗! 

程序运行结果

int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
	return 0;
}

这里有个隐藏知识点就是全局变量或静态变量未初始化时默认为0局部变量一般初始化为随机值

显然-1是不可能大于一个正数的,但sizeof是无符号类型,用于计算内存大小,在进行比较时算数优先级低的int类型会被转换成unsigned int进行比较,此时-1被当作一个很大的正数来看待,所以会输出'>’。 

上三角判定

上三角矩阵判定_牛客题霸_牛客网

先打印矩阵,下三角要遍历所有行,选择遍历列,以对角线为结束条件(j<i),设置一个开关默认为1,当遇到0时利用goto语句跳出多层循环的特点打印"NO",否则打印1。

	int n;
	scanf("%d", &n);
	int arr[n][n];
	int i = 0;
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = 0; j < n; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	int flag = 1;
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = 0; j < i; j++)
		{
			if (arr[i][j] != 0)
			{
				flag = 0;
				goto end;
			}
		}
	}
end:
	if (flag == 0)
		printf("NO\n");
	else printf("YES\n");

注意没有执行goto end这一语句时仍然会执行end:后的语句。

进制转换

小乐乐与进制转换_牛客题霸_牛客网

  • 我们都知道10进制转换为6进制要先进行取余操作:

6%6 = 0

  • 再进行除法:

6/6 = 1        

1做为新的操作数重复以上操作就能得到6进制的形式,可以看出结果是逆序的,我们可以考虑用递归的形式。

 常规做法

#include <stdio.h>
int main()
{
    int n = 0;
    int arr[40] = {0};
    int i = 0;
    scanf("%d", &n);
    while(n)
    {
        arr[i++] = n%6;
        n/=6;
    }
    for(i--; i>=0; i--)
    {
        printf("%d", arr[i]);
    }
    
    return 0;
}

利用数组接收每一个倒序的6进制数,再逆序打印就是对应的结果。

递归

void six_swap(int n)
{
    if(n>0)
    {
        six_swap(n/6);
        printf("%d",n%6);
    }
}
int main()
{
    int a;
    scanf("%d", &a);
    six_swap(a);
}

删除指定数字

序列中删除指定数字_牛客题霸_牛客网

思路:遍历数组,将不为删除的数字放入原数组,跳过需要删除的数组。

当然,也可以直接跳过删除的数字打印,算是一种取巧的做法。

#include <stdio.h>

int main()
{
    int num;
    scanf("%d", &num);
    int arr[50] = { 0 };//数组大小0<m<50
    int i = 0;
    for (i = 0; i < num; i++)
    {
        scanf("%d", &arr[i]);
    }
    int del;
    scanf("%d", &del);
    //创建一个新的变量接收不需删除的元素
    int j = 0;
    for (i = 0; i < num; i++)
    {
        if (arr[i] != del)
        {
            arr[j] = arr[i];
            j++;
        }
    }
        for (i = 0; i < j;i++)
        {
                printf("%d ", arr[i]);//打印新的数组
        }
    /*for (i = 0; i < num; i++)
    {
        if(arr[i]!=del)
        printf("%d",arr[i]);
    }选择性忽略做法*/
    return 0;
}

小乐乐走台阶

小乐乐走台阶_牛客题霸_牛客网

两种走法,第一次走一步还有n-1步,第一次走2步还有n-2步,第二次可以选择走一步(n-2 || n-3)或者两步(n-3 || n-4).......

 

以3为例, 每一层有两种选择,每条支路相加就是所有的走法了。

#include <stdio.h>
int Fab_sta(int x)
{
    if (x <= 2)
        return x;
    else
    {
        return Fab_sta(x-1) + Fab_sta(x-2);
    }
}
int main()
{
     int a;
    scanf("%d",&a);
    printf("%d",Fab_sta(a));
    return 0;
}

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

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

相关文章

前端:html实现页面切换、顶部标签栏,类似于浏览器的顶部标签栏(完整版)

效果 代码 <!DOCTYPE html> <html><head><style>/* 左侧超链接列表 */.link {display: block;padding: 8px;background-color: #f2f2f2;cursor: pointer;}/* 顶部标签栏 */#tabsContainer {width:98%;display: flex;align-items: center;overflow-x: …

深度学习——感受野

在CNN中&#xff0c;决定某一层输出结果中一个元素所对应的输入层的区域大小被称作感受野&#xff08;receptive field&#xff09;&#xff0c;指的是神经网络中一个神经元可以感知到的区域&#xff0c;在CNN中&#xff0c;即 上某个元素的计算受输入图像上影响的区域&#xf…

Android DataBinding 基础入门

DataBinding 是谷歌官方发布的一个框架&#xff0c;顾名思义即为数据绑定&#xff0c;是 MVVM 模式在 Android 上的一种实现&#xff0c;用于降低布局和逻辑的耦合性&#xff0c;使代码逻辑更加清晰。MVVM 相对于 MVP&#xff0c;其实就是将 Presenter 层替换成了 ViewModel 层…

github加速的方法

一、UU加速器 1、下载软件 网易UU加速器——不止快&#xff0c;还很稳 (163.com) 2、搜索学术两个字&#xff0c;点击启动游戏 二、Steam加速器 1、下载软件 Watt Toolkit - 瓦特工具箱(Steam官网) (steampp.net) 2、选择按钮之后&#xff0c;点击一键启动

聚焦磷酸铁锂产线革新,宏工科技一站式解决方案

兼顾了低成本与安全性两大属性&#xff0c;磷酸铁锂市场在全球范围内持续升温&#xff0c;并有望保持较高的景气度。巨大的需求空间之下&#xff0c;行业对于锂电装备企业的自动化与智能化水平、整线交付能力、产品效率与稳定性等均提出了新的要求。 以宏工科技股份有限公司&a…

【IOTE】物联网射频模组和芯片级方案提供商——深圳信驰达科技将精彩亮相IOTE物联网展

►►►强势来袭 Strong Attack 主物联场&#xff0c;相约深圳&#xff1b;2023&#xff0c;共论商机&#xff01;IOTE2023第二十届国际物联网展深圳站将于2023年9月20-22日在深圳国际会展中心(宝安新馆)开展&#xff01;汇聚全球超800家参展企业&#xff0c;呈现更多数字化纷呈…

恒运资本:两市迎普涨,创业板指涨超3%,汽车配件等板块走强

29日早盘&#xff0c;A股两市低开高走&#xff0c;沪指涨幅超1%&#xff0c;创业板指涨超3%。截至午间收盘&#xff0c;沪指涨1.39%报3141.82点&#xff0c;深成指涨2.41%&#xff0c;创业板指涨3.47%%&#xff0c;两市算计成交6265亿元。北向资金净流入超38亿元。盘面上&#…

基于面向对象的空间自相关指数,即插即用!Moran‘s I,局部莫兰指数,Geary‘s C指数,附完整可行使用案例

Geary’s C Geary’s C&#xff08;也称为Geary’s coefficient&#xff09;是一种用于衡量空间自相关性的统计指标&#xff0c;它可以用来评估地理数据中的空间聚集或离散程度。Geary’s指数的计算公式如下&#xff1a; G ( n − 1 ) ∗ ( Σ Σ w i j ∗ ( x i − x j ) 2…

windows下Node版本的切换方式

为了避免应用构建出错&#xff0c;我们在本地开发环境的 Node 版本与在 CI/CD 流程中指定的 Node 版本需保持一致。在这种需要频繁切换 Node 版本的情况下&#xff0c;我们不可能手动卸载又安装不同的版本&#xff0c;这时我们可以借助 NVM 工具来帮助我们快速地切换 Node 版本…

轻量、便捷、高效—经纬恒润AETP助力车载以太网测试

随着自动驾驶技术和智能座舱的不断发展&#xff0c;高宽带、高速率的数据通信对主干网提出了稳定、高效的传输要求&#xff0c;CAN(FD)、LIN已无法充分满足汽车的通信需求。车载以太网作为一种快速且扩展性好的网络技术&#xff0c;已经逐步成为了汽车主干网的首选。 此外&…

无涯教程-Android - Services

服务是在后台运行以执行长时间运行的操作而无需与用户交互的组件&#xff0c;并且即使应用程序被破坏&#xff0c;它也可以工作。服务实际上可以采取两种状态- Sr.No.State & Remark1 Started 当应用程序组件(如Activity)通过调用 startService()启动服务&#xff0c;启动后…

vue数组对象中按某一字段排序

给下列数组字段中的month排序 第一步&#xff1a;methods中写一个方法如下&#xff1a; sortBy(attr, rev) {//第二个参数没有传递 默认升序排列if(rev undefined) {rev 1;} else {rev (rev) ? 1 : -1;}return function(a, b) {a a[attr];b b[attr];if(a < b) {retu…

概念解析 | 合成孔径雷达在海洋动力学研究中的应用

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:合成孔径雷达海洋动力研究。 揭秘海洋的心跳:合成孔径雷达与海洋动力学的交响乐 海洋,那个占据地球表面三分之二的神秘世界,它的运动和变化直接影响着全球气候系统,以及…

解决maven仓库无法自动下载程序包的问题

在调试idea项目报错&#xff1a;未解析的依赖项:de.fhpotsdam:unfolding:jar:0.9.6 问题描述解决方法总结 问题描述 在调试idea项目时报如上所示错误&#xff0c;并尝试了网上所说的更改maven仓库为阿里云仓库等方法&#xff0c;但是maven均无法自动下载unfolding程序包。 解…

企业重要数据怎么加密?企业数据加密软件哪个好?

企业的数据安全至关重要&#xff0c;关系到企业的健康发展&#xff0c;我们可以采用加密的方法来保护企业数据安全。那么&#xff0c;企业重要数据该怎么加密呢&#xff1f;企业数据加密软件哪个好&#xff1f;下面我们就来了解一下。 企业数据加密要求 企业数据加密的要求往…

YOLOv5模型压缩:综述

YOLOv5模型压缩:综述 AbstractIntroduction剪枝基于ln-范数修剪模型Feature map activationBatch normalization scaling factor (BNSF)First-order derivativeMutual informationGranularity of Pruning非结构化剪枝结构化剪枝基于通道的修剪基于滤波器的修剪基于核的剪枝关于…

AutoRunner自动化测试工具新版本智能识别算法之视觉识别

泽众AutoRunner&#xff08;简称AR&#xff09;是国内专业的支持C/S、B/S各种技术框架的、基于组件识别的自动化测试工具&#xff0c;实现7*24小时的自动化回归测试和功能测试&#xff0c;让测试更智能。 视觉识别是一种通过计算机技术对图像或视频进行分析和理解的方法。这种算…

checkstyle检查Java编程样式:final参数

checkstyle可以利用FinalParameters检查方法、构造器、catch和for-each块的参数是final的&#xff1a; https://checkstyle.sourceforge.io/checks/misc/finalparameters.html 背后的原理&#xff1a;程序执行期间修改参数的值会引起混乱&#xff0c;所以应该避免。 要配置使…

一道经典面试题:@Configuration 和 @Component 有何区别?

关于 Configuration 注解有一个特别经典的面试题&#xff1a; Configuration 和 Component 有什么区别&#xff1f; 无论小伙伴们之前是否背过相关的面试题&#xff0c;今天这篇文章学完之后相信大家对这个问题都会有更深一层的理解&#xff0c;废话不多少&#xff0c;咱们开…

地理空间数据的定义、收集和应用

简介 地理空间数据是指与地球表面特定位置相关的数据。它包含多种数据类型&#xff0c;包括地图、卫星图像和GIS&#xff08;地理信息系统&#xff09;数据。近年来&#xff0c;由于技术的进步以及对有关物理世界的准确和最新信息的需求不断增长&#xff0c;地理空间数据的…