当前位置: 首页 > article >正文

操作符习题练习

1.计算输入一个数的二进制中1的个数

方法一:

#include<stdio.h>
void Count(int n)
{
	int count = 0;
	int i = 0;
	int tmp = 0;
	for (i = 1;i <= 64;i++)//这里是在64位环境下编码进行的,如果是在32位环境下,需要将循环次数改为32
	{
		tmp = n & 1;
		if (tmp == 1)
		{
			count++;
		}
		n = n >> 1;
	}
	printf(count = "%d\n", count);
}

int main()
{
	int n = 0;
	scanf_s("%d", &n);
	Count(n);
	return 0;
}

 运行结果如下:

方法一虽然能够正确计算二进制数中1的个数,但是固定了循环次数,每次计算都需要遍历64(或32)次,可能会造成资源浪费,下面进行改进。

方法二:

#include<stdio.h>
void Count(int n)
{
	int count = 0;
	while (n)
	{

		n = n & (n - 1);
		count++;

	
	}
	printf("count = %d\n", count);
}
int main()
{
	int n = 0;
	scanf_s("%d", &n);
	Count(n);
	return 0;
}

运行结果如下:

2.某人需要走n阶台阶,一次可以选择走一阶或两阶台阶,问走完n阶台阶共有多少种方法?

这是一个典型的斐波那契数列问题。可以使用递归或动态规划来解决。

方法一:递归

#include <stdio.h>

int climbStairs(int n) {
    // base cases
    if (n <= 2) {
        return n;
    }
    
    // recursive case
    return climbStairs(n - 1) + climbStairs(n - 2);
}

int main() {
    int n;
    printf("请输入楼梯的阶数:");
    scanf("%d", &n);
    int ways = climbStairs(n);
    printf("走到楼梯顶部的走法总数:%d\n", ways);
    return 0;
}

方法二:动态规划

#include <stdio.h>

int climbStairs(int n) {
    if (n <= 2) {
        return n;
    }
    
    int prev1 = 1;
    int prev2 = 2;
    int curr;
    
    for (int i = 3; i <= n; i++) {
        curr = prev1 + prev2;
        prev1 = prev2;
        prev2 = curr;
    }
    
    return curr;
}

int main() {
    int n;
    printf("请输入楼梯的阶数:");
    scanf("%d", &n);
    int ways = climbStairs(n);
    printf("走到楼梯顶部的走法总数:%d\n", ways);
    return 0;
}

以递归代码运行为例,结果如下:

3.输入10个整数(可以有重复数据),现删除指定数据,并输出删除后的序列,且未删除的数据的前后位置不变

代码如下:

#include<stdio.h>
void Del(int* arr,int del,int N)
{
	int i = 0;
	int j = 0;
	for (i = 0;i < N;i++)
	{
		if (arr[i] != del)
		{
			arr[j++] = arr[i];
		}
	}
	for (i = 0;i < j;i++)
	{
		printf("%d ", arr[i]);
	}
}

int main()
{
	int N = 10;

	int arr[10] = { 0 };
	int i = 0;
	for (i = 0;i < N;i++)
	{
		scanf_s("%d", &arr[i]);
	}
	int del = 0;
	scanf_s("%d", &del);
	Del(arr,del,N);

	return 0;
}

代码运行结果如下:

4.编写一个程序,输入一个字符串,判断该字符串是否为回文字符串(正序和倒序相同)。 如果是回文字符串,则输出"是回文字符串",否则输出"不是回文字符串"。

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

int isPalindrome(char str[]) {
    int len = strlen(str);
    int i, j;
    
    for(i = 0, j = len-1; i < j; i++, j--) {
        if(str[i] != str[j]) {
            return 0;
        }
    }
    
    return 1;
}

int main() {
    char str[100];
    printf("请输入一个字符串:");
    scanf("%s", str);
    
    if(isPalindrome(str)) {
        printf("是回文字符串\n");
    } else {
        printf("不是回文字符串\n");
    }
    
    return 0;
}

输出:

请输入一个字符串:abcdcba
是回文字符串

5.编写一个程序,输入一个正整数n,将该整数分解为若干个素数的乘积。 例如,输入数值为20,可以分解为2 * 2 * 5

#include <stdio.h>

int isPrime(int num) {
    if(num <= 1) {
        return 0;
    }
    
    for(int i = 2; i * i <= num; i++) {
        if(num % i == 0) {
            return 0;
        }
    }
    
    return 1;
}

void primeFactorization(int n) {
    printf("%d可以分解为素数的乘积:", n);
    
    for(int i = 2; i <= n; i++) {
        if(isPrime(i) && n % i == 0) {
            printf("%d ", i);
            n /= i;
            i--;
        }
    }
    
    printf("\n");
}

int main() {
    int n;
    printf("请输入一个正整数:");
    scanf("%d", &n);
    
    primeFactorization(n);
    
    return 0;
}

输出:

请输入一个正整数:20
20可以分解为素数的乘积:2 2 5

 该程序中包含了两个函数,isPrime用于判断一个数是否为素数,primeFactorization用于将一个正整数分解为素数的乘积。 首先需要调用isPrime函数来判断一个数是否为素数。isPrime函数通过遍历判断从2到i的平方根之间是否存在可以整除的数,如果存在,则该数不是素数,返回0;否则,返回1。 然后,在primeFactorization函数中,使用一个循环来遍历从2到n的数。首先判断该数是否为素数并且能够整除n,如果是,则打印该数并将n除以该数,再将循环变量i减1,以便继续检查是否有其他素数可以整除n。最后,输出结果。


http://www.kler.cn/a/376085.html

相关文章:

  • mac如何下载 测试旧版chrome兼容问题
  • SQL 基础语法(一)
  • DataFlow v202410 版本更新 一站式数据处理平台
  • STM32中ARR(自动重装寄存器)为什么要减1
  • 【数据结构】宜宾大学-计院-实验六
  • Hailo-8/8L系列汇总
  • C语言 | Leetcode C语言题解之第519题随机翻转矩阵
  • 金华迪加 现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现
  • R 数据框
  • RabbitMQ 存储机制
  • 像`npm i`作为`npm install`的简写一样,使用`pdm i`作为`pdm install`的简写
  • ARM base instruction -- madd
  • 函数的多返回值及多种传参方式
  • Python 的基本语法
  • 【C#】异步和多线程
  • 速度!双击文件就可以运行本地大模型!神奇的AI大模型开源项目——llamafile
  • Redis中储存含LocalDateTime属性对象的序列化实现
  • R数据结构向量基础
  • 公有云开发基础教程
  • 汽车固态电池深度报告
  • 4K双模显示器值得买吗?
  • Python WordCloud库与jieba分词生成词云图的完整指南
  • Ollama:本地部署与运行大型语言模型的高效工具
  • 在kanzi 3.9.8里使用API创建自定义材质
  • PHP反序列化原生类字符串逃逸框架反序列化利用
  • 奥数与C++小学四年级(第十七题 弹跳板)