C语言:三道有趣的算法题
作者:互联网
C语言:三道算法题
文章目录
(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;
}
标签:关机,arr,return,int,三道,C语言,算法,include 来源: https://blog.csdn.net/weixin_48025315/article/details/122026694