品茗面试题
1.交换两个int变量的值,不能使用第三个变量,即a=3,b=5,交换后,a=5,b=3;
#include<stdio.h>
//int main(){
// //打印函数,引用头文件.stdio.h
// printf("hello world\n");//打印函数
// return 0;
//}
int a=3;
int b=5;
int c=0;
int main()
{
printf("交换前:a=%d b=%d\n",a,b);
//交换2个整型变量
//1
c=a;
a=b;
b=c;
printf("交换后:a=%d b=%d\n",a,b);
return 0;
}
#include<stdio.h>
int main(){
//交换2个整型变量
int a=3;
int b=5;
printf("交换前:a=%d b=%d\n",a,b);
a = a+b;
b = a-b;//b得到了原来的a
a = a-b;//a得到了原来的b
printf("交换后:a=%d b=%d\n"a,b);
return 0;
}
以上的写法缺点就是有有可能会发生溢出问题
采用异或不会溢出的
#include<stdio.h>
int main(){
//交换2个整型变量
int a=3;
int b=5;
printf("交换前:a=%d b=%d\n",a,b);
// a = a+b;
// b = a-b;//b得到了原来的a
// a = a-b;//a得到了原来的b
a=a^b;
b=a^b;
a=a^b;
printf("交换后:a=%d b=%d\n",a,b);
return 0;
}
进入企业会采用临时变量(第三个变量)的方法----代码的可读性高,执行效率高
第三种方法可读性差,执行效率低于其他方法。
2. 找出只出现一次的数
题面:给定一个非空整形数组,除了某个元素只出现一次以外,其余的每个元素均出现两次,找出那个只出现一次的元素。
样例:int a[]={1,2,3,4,5,1,2,3,4},该数组中只出现了5一次,其余数字都是成对出现的,找出5.
方法一 :
暴力求解
#include<stdio.h>
#include<limits.h>
int main(){
int arr[]={1,2,3,4,5,1,2,3,4};
//找出单身狗
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<sz;i++)
{
//统计arr[i]在arr数组中出现了几次
int j=0;
int count=0;
for(j=0;j<sz;j++){
if(arr[i]==arr[j]){
count++;
}
}
if(count==1)
{
printf("单身狗:%d\n",arr[i]);
break;
}
}
return 0;
}
我们使用异或方法
#include<stdio.h>
#include<limits.h>
int main(){
int arr[]={1,2,3,4,5,1,2,3,4};
//找出单身狗
//暴力求解
int i=0;
int ret=0;
int sz=sizeof(arr)/sizeof(arr[0]);//计算数组的元素个数
for(i=0;i<sz;i++)
{
ret=ret^arr[i];
}
printf("单身狗:%d\n",ret);
return 0;
return 0;
}
3. 写一个关机程序
程序运行,你的电脑在1分钟后关机,如果输入:我是猪,就取消关机
#include<stdio.h>
#include<limits.h>
#include<stdlib.h>//ststem
#include<string>//strcmp
int main(){
char input[20]={0};//存储数据
//关机
//system()-专门用来执行系统命令
system("shutdown -s -t 60");//关机
again:
printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n");
scanf("%s",input);//%s -字符串
if(strcmp(input,"我是猪")==0){//判断input中放的是不是“我是猪”-strcmp -string compare
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}