易码技术论坛

 找回密码
 加入易码
搜索
查看: 2424|回复: 48

一道折腾我好久的C题

[复制链接]
发表于 2008-1-7 22:31:17 | 显示全部楼层 |阅读模式
#include<stdio.h>

void main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    /*这里写一行代码*/
    printf("a = %d\nb = %d",a,b);
    getch();
}
那还代码的要求是:
判断a是否小于b,是的话交换a和b的值
不准用if ,while ,for 逗号,三目运算符
发表于 2008-1-7 22:45:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2008-1-7 22:51:59 | 显示全部楼层
不是,发在别的地方都没人看的

楼上就当我在灌水吧

你能告诉我答案吗?
发表于 2008-1-7 22:54:09 | 显示全部楼层
  1. a = a ^ b;
  2. b = a ^ b;
  3. a = a ^ b;
复制代码
发表于 2008-1-7 22:55:43 | 显示全部楼层
上面是3行代码,不是一行
发表于 2008-1-7 22:57:05 | 显示全部楼层
都下在一行不久得了。
发表于 2008-1-7 22:57:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2008-1-7 22:57:33 | 显示全部楼层
恩,很强大

不过, 能解释一下原理吗?
发表于 2008-1-7 22:58:46 | 显示全部楼层
a<b?a^=(b^=(a^=b)):a;
发表于 2008-1-7 23:00:20 | 显示全部楼层
原帖由 红色激情 于 2008-1-7 22:57 发表

盐,你好

看来我得换头像了。
 楼主| 发表于 2008-1-7 23:00:49 | 显示全部楼层
题目的要求是不得用不准用if ,while ,for ,逗号,三目运算符

只能是一句代码,就是只有一个分号
发表于 2008-1-7 23:01:07 | 显示全部楼层
yan大哥头像很好啊
发表于 2008-1-7 23:02:00 | 显示全部楼层
原帖由 yan 于 2008-1-7 22:57 发表
都下在一行不久得了。


不对吧?
我想楼主的意思是在一个;号结束前就实现楼主的要求
发表于 2008-1-7 23:02:17 | 显示全部楼层
a<b&&a^=(b^=(a^=b));
发表于 2008-1-7 23:04:27 | 显示全部楼层
厉害!
这也想的出
发表于 2008-1-7 23:06:37 | 显示全部楼层
  1. a = (b = (a = a ^ b) ^ b) ^ a;
复制代码
发表于 2008-1-7 23:08:01 | 显示全部楼层
或者
  1. a = a ^ b, b = a ^ b, a = a ^ b;
复制代码
发表于 2008-1-7 23:08:56 | 显示全部楼层
楼主说了,不能出现逗号
发表于 2008-1-7 23:10:07 | 显示全部楼层
原帖由 yan 于 2008-1-7 23:06 发表
a = (b = (a = a ^ b) ^ b) ^ a;


判断a是否小于b,是的话交换a和b的值
似乎没有判断大小啊
发表于 2008-1-7 23:10:24 | 显示全部楼层
哦,没看清
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-5-2 15:44 , Processed in 0.013867 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表