1,如何交换两个值,不用第三个变量?
①代入第三个变量法:
int main()
{
int num1 = 10;
int num2 = 20;
int num = 0;
cout << num1 << '\t' << num2<<endl;
num = num1;
num1 = num2;
num2 = num;
cout << num1 << '\t' << num2<<endl;
}
//此方法一般具有很好的可读性。
②加减法:
int main()
{
int num1 = 10;
int num2 = 20;
cout << num1 << '\t' << num2 << endl;
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
cout << num1 << '\t' << num2 << endl;
}
//满足了不使用第三个变量的条件,但存在一个问题,如果定义的数太大,就会造成溢出现象,不是一个最佳的方法。
③位运算(异或法):
int main()
{
int num1 = 10;
int num2 = 20;
cout << num1 << '\t' << num2 << endl;
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
cout << num1 << '\t' << num2 << endl;
}
//异或规则:按二进制进行异或:相同为0,相异为1。此方法满足了不使用第三个变量的条件,且不会存在溢出现象,但可读性太差,一般自己使用中,推荐使用方法①。
2,找一次出现的数?
①直接找,数数字:
int main()
{
int a[] = {
1,2,3,4,5,1,2,3,4 };
int i;
int sz = sizeof(a)/sizeof(a[0]);
for (i = 0; i < sz; i++)
{
int count = 0;
int j;
for (j = 0; j < sz; j++)
{
if (a[i] == a[j])
{
count++;
}
}
if (count == 1)
{
cout << a[i] << endl;
break;
}
}
}
//此方法太过冗余,不够简练,但也能实现要求。
②异或法:
int main()
{
int a[] = {
1,2,3,4,5,1,2,3,4 };
int i;
int sz = sizeof(a)/sizeof(a[0]);
int ret = 0;
for (i = 0; i < sz; i++)
{
ret ^= a[i];
}
cout << ret << endl;
}
//此方法可以很简洁的实现要求,且极具可读性。
//在上面两个列子中可以看出来,一种运算可以解决许多的问题,这需要对知识掌握的更加牢靠,更有深度。
3,一个有趣的小例子:
Windows的自动关机命令是:shutdownn -s -t 时间(以秒来运算)
int main()
{
char input[20];
int i;
system("shutdown -s -t 60");
cout << "你的电脑将在一分钟之后关机,请输入我是猪取消操作>";
again:
cin >> input;
if (strcmp(input, "我是猪")==0)
{
system("shutdown -a");
}
else
{
cout << "你的电脑将在一分钟之后关机,请输入我是猪取消操作>" ;
goto again;
}
}
//在这里呢,用到了strcmp函数,其用法为strcmp(str1,str2),str1,str2均为字符,对两字符进行比较并返回函数值:
(1) 如果字符串1=字符串2,则函数值为0;
(2) 如果字符串1>字符串2,则函数值为1;
(3)如果字符串1<字符串2,则函数值为-1。
//字符串的比较规则与其它语言中的规则相同,即对两个字符串自左向右逐个字符进行相比(按ASCⅡ码值大小比较),直到出现不同的字符或“\0”为止。