研究生复试的时候老师出的一道算法题,我觉得比较有意思,就来晒晒,看看高人见解。

木乃伊x 2011-09-05 04:10:46
加精
“只用赋值、加1、循环三个操作实现一个减1的运算。”
上面是原话,老师就给那么多信息,没有别的话了。
高人们有代码的可以贴代码,随便你用什么语言,没代码的说说清楚思路也行。顺便帮忙看看哪些答案有错误啊。
...全文
11071 212 打赏 收藏 转发到动态 举报
写回复
用AI写文章
212 条回复
切换为时间正序
请发表友善的回复…
发表回复
ALexSgc1 2013-04-02
  • 打赏
  • 举报
回复
众人的思想是伟大的!不过这道题没有算法的东西吧?有的话难道就是时间复杂度?
  • 打赏
  • 举报
回复
[Quote=引用 100 楼 的回复:]
引用 98 楼 xiaofengeee 的回复:
引用 86 楼 teatimel 的回复:

a = -a;
a++;
a = -a;

只有赋值和加一 没用循环 算不算?

a=0的时候不正确

你确定?
[/Quote]
在机器中,数据是以补码形式存放的!所以-0和0的补码是不同的,如果a = 0 ,那么 a = -a , a++ 后就早已不是我们所熟知的数据了!

其实这道题是一个穷举越界的问题!每一种数据存放都有一定的位数限制,一旦超过所限制的位数,那么它就回到那种类型的最小值,从头开始加起,所以“ for (i; (i + 1) != a; i++) ”是可以找到最终答案的!即一楼的做法最终可以找到答案!
tanwenhai123 2012-03-23
  • 打赏
  • 举报
回复
不清楚什么意思。。。。。。
vagrant_star 2012-02-21
  • 打赏
  • 举报
回复
看懂了~~差距啊~~
不老神仙 2011-11-03
  • 打赏
  • 举报
回复
学习学习 咋看一眼 
t912428723 2011-09-30
  • 打赏
  • 举报
回复
#include "stdio.h"
void main()
{
int a,i;
printf("输入:");
scanf("%d",&a);
for(i=0;i<a;i++)
{
if(i+1==a)
{
printf("%d,%d\n",a,i);
}
}
}
这样行不行..........
codesnail 2011-09-22
  • 打赏
  • 举报
回复
老师脑子进水了。。。。。。
wangchao_ 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 xb_feng 的回复:]

这题目不是C语言题目,也不是考算法,而是考你计算机整数处理的基本概念

先要看整数是多长的,假设是16位的,那么循环65535次的加一,就是减一

对于n比特宽的整数,循环2^n - 1次加一,就是减一。
[/Quote]

有点理解,但又不是很理解。。。
wangchao_ 2011-09-15
  • 打赏
  • 举报
回复
这个问题有什么实际意义?
  • 打赏
  • 举报
回复
神马意思 还没看懂
BuleRiver 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 86 楼 teatimel 的回复:]
a = -a;
a++;
a = -a;
只有赋值和加一 没用循环 算不算?
[/Quote]
这个不行吧,因为用到了负号操作符。
littleubuntu 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 100 楼 teatimel 的回复:]
引用 98 楼 xiaofengeee 的回复:
引用 86 楼 teatimel 的回复:

a = -a;
a++;
a = -a;

只有赋值和加一 没用循环 算不算?

a=0的时候不正确

你确定?
[/Quote]

hussar029 2011-09-14
  • 打赏
  • 举报
回复
是不是就让i溢满后重新来一遍?
coldyeah 2011-09-14
  • 打赏
  • 举报
回复
楼主可以用补码呀
wen858636827 2011-09-14
  • 打赏
  • 举报
回复
俺什么都不知道 就是来学习的
nofuck 2011-09-14
  • 打赏
  • 举报
回复
需求不明确,玩文字游戏,也就是专家喜欢了
cheniwantyou 2011-09-14
  • 打赏
  • 举报
回复
什么鸟鸡巴问题
juxie1984 2011-09-14
  • 打赏
  • 举报
回复
楼主过了么
pangfan09 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 xb_feng 的回复:]
这题目不是C语言题目,也不是考算法,而是考你计算机整数处理的基本概念

先要看整数是多长的,假设是16位的,那么循环65535次的加一,就是减一

对于n比特宽的整数,循环2^n - 1次加一,就是减一。
[/Quote]

这个是关键
flying0314 2011-09-14
  • 打赏
  • 举报
回复
不是吧,复试就考这些?
加载更多回复(192)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧