C语言:三道有趣的算法题
2021/12/19 17:49:28
本文主要是介绍C语言:三道有趣的算法题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C语言:三道算法题
文章目录
- (1)交换两个整型变量的值,不能使用第三个变量
- (2)找出只出现一次的数
- 1)算法一:
- 2)算法二:
- (3)程序运行,你的电脑在1分钟后关机,如果输入:我是猪,就取消关机
(1)交换两个整型变量的值,不能使用第三个变量
#include<stdio.h> int main() { //交换两个变量的值,不能使用第三个变量 int x = 3; int y = 5; printf("交换前:x=%d,y=%d\n", x, y); //算法一:相加相减 //缺点:如果参与运算的数很大,会溢出,整型溢出 x = x + y; // 3 + 5 = 8 y = x - y; // 8 - 5 = 3 x = x - y; // 8 - 3 = 5 //算法二:按位异或 //优点:不会溢出 // x = 011, y = 101 x = x ^ y; // 3 ^ 5 = 011 ^ 101 = 110 y = x ^ y; // 110 ^ 101 = 011 = 3 x = x ^ y; // 110 ^ 011 = 101 = 5 printf("交换后:x=%d,y=%d\n", x, y); return 0; }
在企业开发里面:最常使用引入第三变量的方法,可读性强,效率高
(2)找出只出现一次的数
给定一个非空整型数组,除了某个元素只出现一次以外,其余每个元素均出现两次,找到那个只出现一次的元素
1)算法一:
遍历整个数组,统计各元素出现的次数,打印出现一次的元素
#include<stdio.h> int main() { int arr[] = { 1,2,3,4,5,1,2,3,4 }; int size = sizeof(arr) / sizeof(arr[0]); // 求数组长度 int i = 0, j = 0; for (i = 0; i < size; i++) // 遍历数组 { int count = 0; // 统计各元素出现的次数 for (j = 0; j < size; j++) { if (arr[i] == arr[j]) count++; } if (count == 1) { printf("只出现一次的数:%d\n", arr[i]); break; } } return 0; }
2)算法二:
按位异或,把所有数组元素异或在一起 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 1 ^ 2 ^ 3 ^ 4 = 5
时间复杂度: O ( N ) O(N) O(N)
#include<stdio.h> int main() { int arr[] = { 1,2,3,4,5,1,2,3,4 }; int size = sizeof(arr) / sizeof(arr[0]); // 求数组长度 int i = 0; int ret = 0; // 记录异或结果 for (i = 0; i < size; i++) { ret ^= arr[i]; } printf("只出现一次的数:%d\n", ret); return 0; return 0; }
(3)程序运行,你的电脑在1分钟后关机,如果输入:我是猪,就取消关机
#include<stdio.h> #include<string.h> // strcmp #include<stdlib.h> // system int main() { char input[20] = { 0 }; // int system(const char * command) // 函数功能:执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名 system("shutdown -s -t 60"); // 执行关机命令 again: printf("电脑将在一分钟内关机,请输入“ 我是猪 ”,取消关机\n"); scanf("%s", input); if(strcmp(input,"我是猪") == 0) { system("shutdown -a"); // 取消关机命令 } else { goto again; // 跳回某处继续执行 } return 0; }
这篇关于C语言:三道有趣的算法题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享