昨天参加笔试的两道题
1.输入一个整数.如552.计算其各位的和,直到结果为一位数. 比如552过程为 552-->12-->3
2.有50个连续的存储单元存有50个数,如果用顺序选择法找出最大值和最小值,则至少要进行97次比较.
请给出其他方法,要求要比较次数要少于97次.(当然越小越好)
3.
有如下程序段.
int i = 10;
i += 5;
i -= 7;
当程序执行完第一行时,受到电磁波的影响,cup的IP的值加1.问最后i 的值为多少?
问题点数:60、回复次数:71Top
1 楼jixingzhong(瞌睡虫·星辰)回复于 2006-10-24 08:39:26 得分 0
1 简单,
判断一下是否大于 10 , 是则分解各个位求和Top
2 楼jixingzhong(瞌睡虫·星辰)回复于 2006-10-24 08:48:16 得分 0
IP 是指令寄存器,
+1 也就是跳过了一条指令,
结果就是 i += 5; 没有执行,
直接执行 i -= 7;
最后得到 i = 10-7 = 3Top
3 楼mars841215(龙行天下)回复于 2006-10-24 08:56:42 得分 0
第二道题有没有人知道啊?Top
4 楼jixingzhong(瞌睡虫·星辰)回复于 2006-10-24 09:03:48 得分 0
2.
int arr[50]={...};
int min, max,i;
min=max=arr[0];
for(i=0; i<50; i++)
if(arr[i] > max) max=arr[i];
else if(arr[i]<min) min = arr[i];
printf("The max num is: %d\n", max);
printf("The min num is: %d\n", min);
最多比较次数 98,
最少 49 次 ........Top
5 楼mars841215(龙行天下)回复于 2006-10-24 09:06:45 得分 0
楼上的解法好像就是顺序选择....不符合要求..Top
6 楼weakend(0912)回复于 2006-10-24 09:17:29 得分 0
此题出自《算法导论》中的“中位数与顺序统计”一章,为原书例题。
先在原数组中拿出两个数比较一下,小的那个数跟当前最小值比较,大的那个跟当前最大值比较,即可。在刚开始初始化的时候分奇偶数进行分别初始化。
无论奇偶比较次数都不多于 3[n/2]
Top
7 楼mars841215(龙行天下)回复于 2006-10-24 09:36:43 得分 0
楼上能不能再详细一点? 最开始最大值和最小值初始化为多少?Top
8 楼cubety(int argc,char*argv[],char* env[])回复于 2006-10-24 09:48:41 得分 0
1,int[]
2,第一次:两两比较,每次出一个大值B1i,小值S1j;
第二次:两两比较,B1i比较出B2i,S1j比较出S2j
。
。
。
第n-1次:两两比较,出B(n-1)和S(n-1)
若个数为偶数,这个就是终值,
若个数为奇数,第n次:再比较2次,出Bn和Sn
---------------------------------------------
以个数50为例:应该是
第一次:24组(B1 1 ~ B1 24,S1 1 ~ S1 24)+组A(B1 25和S1 25)
第二次:12组(B2 1 ~ B2 12,S2 1 ~ S2 12)+组A(B1 25和S1 25)
第三次:6组 (B3 1 ~ B3 6,S3 1 ~ S3 6) +组A(B1 25和S1 25)
第四次:2组 (B4 1 ~ B4 2,S4 1 ~ S4 2) +组A(B1 25和S1 25)+组C(B4 3和S4 3)
第五次:1组 (B5 1,S5 1) +组D(B5 2 和S5 2)
第六次:B6 ,S6
一共是25 +12*2 +6*2 +3*2 +(1*2+1*2)+1*2 =73
3,不知道
==============================================
仅供参考,可能有问题,只是预演,没有具体写……
呵呵
Top
9 楼mars841215(龙行天下)回复于 2006-10-24 09:49:08 得分 0
不好意思,没分可用了...问一道笔试题---考测试
一个学校的食堂餐卡系统,在使用前对其进行测试,请设计尽可能多的测试用例..Top
10 楼weakend(0912)回复于 2006-10-24 09:51:42 得分 0
初始化时:如果是奇数就把第一个数赋值给当前最大值和最小值;如果是偶数就把前两个数比较一下,小的作为当前最小值,大的为当前最大值。
完毕。
Top
11 楼weakend(0912)回复于 2006-10-24 10:06:56 得分 0
cubety(int argc,char*argv[]) ( ) 信誉:100 Blog 2006-10-24 09:48:00 得分: 0
1,int[]
2,第一次:两两比较,每次出一个大值B1i,小值S1j;
第二次:两两比较,B1i比较出B2i,S1j比较出S2j
。
。
。
第n-1次:两两比较,出B(n-1)和S(n-1)
若个数为偶数,这个就是终值,
若个数为奇数,第n次:再比较2次,出Bn和Sn
---------------------------------------------
以个数50为例:应该是
第一次:24组(B1 1 ~ B1 24,S1 1 ~ S1 24)+组A(B1 25和S1 25)
第二次:12组(B2 1 ~ B2 12,S2 1 ~ S2 12)+组A(B1 25和S1 25)
第三次:6组 (B3 1 ~ B3 6,S3 1 ~ S3 6) +组A(B1 25和S1 25)
第四次:2组 (B4 1 ~ B4 2,S4 1 ~ S4 2) +组A(B1 25和S1 25)+组C(B4 3和S4 3)
第五次:1组 (B5 1,S5 1) +组D(B5 2 和S5 2)
第六次:B6 ,S6
一共是25 +12*2 +6*2 +3*2 +(1*2+1*2)+1*2 =73
3,不知道
==============================================
仅供参考,可能有问题,只是预演,没有具体写……
呵呵
///////////////////////////////////////////////////////////
算法错误!Top
12 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-10-24 10:12:57 得分 0
IP 是指令寄存器,
+1 也就是跳过了一条指令,
结果就是 i += 5; 没有执行,
直接执行 i -= 7;
最后得到 i = 10-7 = 3
-------------------------------------
IP + 1 并非跳过一条指令,而是一个在代码段中跳过一个字节,一条指令可能有很多字节的。
就算是一条指令,也不是一条 C++ 语句, 一条语句编译后可能是 N 多指令Top
13 楼cubety(int argc,char*argv[],char* env[])回复于 2006-10-24 10:13:17 得分 0
一个学校的食堂餐卡系统,在使用前对其进行测试,请设计尽可能多的测试用例..
---------------------------
-----------------------------
以下为有损测试过程
一,以任何角度掰成两半,测试半卡性能
需要测试的数据:1,掰断的平均力度。建议设置在女生稍微用力就能弄断为最佳
2,裂纹轨迹。尽量使裂纹往电路(或者卡里面的主要单元)那边靠,
以免流行半卡主义
二,Top
14 楼cubety(int argc,char*argv[],char* env[])回复于 2006-10-24 10:15:04 得分 0
算法错误!
----------
说说怎么错了,请指教Top
15 楼weakend(0912)回复于 2006-10-24 10:36:42 得分 0
不好意思,刚才把
cubety(int argc,char*argv[]) 中的
2,第一次:两两比较,每次出一个大值B1i,小值S1j;
这句理解错了
现在看来cubety(int argc,char*argv[]) 想表达的应该是
2,第一次:两两比较,每次出一对 大值B1i,小值S1j;
此思路比较次数与算法导论思路一样,只是稍更复杂了一些。
特此道谦,谢谢指正。
Top
16 楼pcboyxhy(-273.15℃)回复于 2006-10-24 10:37:29 得分 0
1.输入一个整数.如552.计算其各位的和,直到结果为一位数. 比如552过程为 552-->12-->3
不是9的倍数的,取除以9的余数
9的倍数的就是9
3.
有如下程序段.
int i = 10;
i += 5;
i -= 7;
当程序执行完第一行时,受到电磁波的影响,cup的IP的值加1.问最后i 的值为多少?
这个比较复杂
首先
i+5并不能保证就是原子操作
操作系统调度的时候
很可能在执行完int i=10;之后就把时间片分配给了别的进程
这样EIP加1对这个进程就没有影响了Top
17 楼cubety(int argc,char*argv[],char* env[])回复于 2006-10-24 10:42:04 得分 0
此思路比较次数与算法导论思路一样,只是稍更复杂了一些。
特此道谦,谢谢指正。
-----------------------------
用不着道歉,呵呵 ,大家都是来讨论问题的Top
18 楼qxbnit(蓝灵)回复于 2006-10-24 11:02:28 得分 0
我才疏学浅:
偷偷的说;
第一题:最笨的办法:数字拆开成数组,然后一个个加,直到数组长度是1
第二题:冒泡泡排序,应该可以吧
第三题:本来想说i-=7的,也就是10-7 = 3,可看到楼上说有可能什么系统调度—……%¥*¥……*!·#%¥,只是道测试题,测试的人不会问这么复杂吧…………Top
19 楼benjiam(今晚打老虎)回复于 2006-10-24 11:09:59 得分 0
还2星星呢? 明显错误
+1 不代表 跳过一条指令 而是一个字节
所以结果为10
Top
20 楼wp03141592(涵)回复于 2006-10-24 11:17:18 得分 0
第一题:用函数的递归调用
第二题:二分排序
第三题:同意一楼意见Top
21 楼cjianwen(空前)回复于 2006-10-24 11:42:09 得分 0
偶只会做第一题:
procedure TForm1.Button1Click(Sender: TObject);
var
l,i,n,t: Integer;
s: String;
begin
n := StrToInt(Edit1.Text);
ListBox1.Items.Add(Edit1.Text);
while (n > 10) do
begin
t := 0;
s := IntToStr(n);
l := Length(s);
for i := 1 to l do
t := t + StrToInt(s[i]);
n := t;
ListBox1.Items.Add(IntToStr(N));
end;
end;
哈哈。。。Top
22 楼cjianwen(空前)回复于 2006-10-24 11:43:43 得分 0
晕,掉了=号。。。Top
23 楼superarhow(苏泊尔耗)回复于 2006-10-24 11:51:28 得分 0
跳过1个字节,指令就完全变了啊,AV啊、II啊、SO啊,都可能出现的 -___-bTop
24 楼youzelin()回复于 2006-10-24 11:55:07 得分 0
学习Top
25 楼weiym(磨刀霍霍向猪羊)回复于 2006-10-24 12:01:07 得分 0
第一题
#include <iostream>
using namespace std;
int seperateNum(int n,int sBuf[],int nLen)
{
int nTemp=n;
int i=0;
while((nTemp>=10)&&(i<nLen-1))
{
sBuf[i++]=nTemp%10;
nTemp=nTemp/10;
}
sBuf[i++]=nTemp;
return i;
}
int getSum(int sBuf[],int n)
{
int nRet=0;
for(int i=0;i<n;i++)
{
nRet+=sBuf[i];
}
return nRet;
}
void printResult(int sBuf[],int n,int nValue)
{
for(int i=n-1;i>=0;i--)
{
cout<< sBuf[i];
}
cout<<"\n";
cout<<nValue;
cout<<"\n\n";
}
int _tmain(int argc, _TCHAR* argv[])
{
int sBuf[10];
const int N=1234567;
int n=N;
int nLen;
while(n>10)
{
nLen=seperateNum(n,sBuf,10);
n=getSum(sBuf,nLen);
printResult(sBuf,nLen,n);
}
return 0;
}Top
26 楼wulei5482(忍者)回复于 2006-10-24 12:28:36 得分 0
pcboyxhy(-273.15℃) ( ) 信誉:110 Blog 2006-10-24 10:37:30 得分: 0
1.输入一个整数.如552.计算其各位的和,直到结果为一位数. 比如552过程为 552-->12-->3
不是9的倍数的,取除以9的余数
9的倍数的就是9
=========================================================
拜一个,这么牛b的方法居然没人关注啊
x*100+y*10+z 是原数,x+y+z是要算的数
x*100+y*10+z = 9*(11x+y)+x+y+zTop
27 楼leibo3008(渔民)回复于 2006-10-24 12:32:30 得分 0
markTop
28 楼leibo3008(渔民)回复于 2006-10-24 12:45:07 得分 0
第二题:用下面的程序只需比较(50-2)*3/2+1=73次。
和weakend的有点像,但好像不用判断奇偶吧。
main()
{ int a[50],max,min;
int i;
if(a[0]<a[1]) {min=a[0];max=a[1];}
else {min=a[1];max=a[0];}
for(i=2;i<50;i+=2)
if(a[i]>a[i+1]) {if(a[i]>max) max=a[i]; if(a[i+1]<min) min=a[i+1];}
else {if(a[i+1]>max) max=a[i+1]; if(a[i]<min) min=a[i];}
printf("max=%d,min=%d.\n",max,min);
}Top
29 楼qxbnit(蓝灵)回复于 2006-10-24 12:55:42 得分 0
pcboyxhy(-273.15℃) ( ) 信誉:110 Blog 2006-10-24 10:37:30 得分: 0
1.输入一个整数.如552.计算其各位的和,直到结果为一位数. 比如552过程为 552-->12-->3
不是9的倍数的,取除以9的余数
9的倍数的就是9
=========================================================
拜一个,这么牛b的方法居然没人关注啊
x*100+y*10+z 是原数,x+y+z是要算的数
x*100+y*10+z = 9*(11x+y)+x+y+z
=============
如果之前没看见过题目,看到这个帖子,立即想到这个算法,,的确NB!---->数学很NB!Top
30 楼rickerliang(专回0分贴(来交流不是为分))回复于 2006-10-24 13:09:42 得分 0
不是ip而是pc
pc加一的结果是跳一个cpu字,字的大小与cpu的位数有关,通常一条cpu指令大小为一个cpu字的大小
那高级语言来讨论汇编,就像盲人摸象。Top
31 楼songlife33(美女,偶们结婚吧)回复于 2006-10-24 13:58:26 得分 0
IP 是指令寄存器,
+1 也就是跳过了一条指令,
结果就是 i += 5; 没有执行,
直接执行 i -= 7;
最后得到 i = 10-7 = 3
你就确定i += 5;被编译后是一条指令?
Top
32 楼songlife33(美女,偶们结婚吧)回复于 2006-10-24 13:58:58 得分 0
这题根本就事忽悠人地!Top
33 楼rickerliang(专回0分贴(来交流不是为分))回复于 2006-10-24 14:22:38 得分 0
pc程序计数器
ir指令寄存器
ir=正在执行的指令
pc=指向下一条读入ir的指令的地志Top
34 楼dandanmylady(张师傅说:"活着就是为了消费")回复于 2006-10-24 14:24:56 得分 0
mark
Top
35 楼weakend(0912)回复于 2006-10-24 14:28:40 得分 0
leibo3008(渔民) ( ) 信誉:100 Blog 2006-10-24 12:45:00 得分: 0
第二题:用下面的程序只需比较(50-2)*3/2+1=73次。
和weakend的有点像,但好像不用判断奇偶吧。
/////////////////////////////////////////////////////////////////////////////
初始时是要讨论奇偶的。不然leibo3008(渔民)的程序只能对偶数起作用(比如此题的50)。
完毕。Top
36 楼blue_zyb()回复于 2006-10-24 14:29:08 得分 0
恩,9的倍数各位之和能被9整除,有点意思,学习了。Top
37 楼horsoner(Kity)回复于 2006-10-24 14:29:15 得分 0
pcboyxhy(-273.15℃) ( ) 信誉:110 Blog 2006-10-24 10:37:30 得分: 0
==========================================================================
牛人!!Top
38 楼qdhuxp(阿牛)回复于 2006-10-24 14:42:42 得分 0
pcboyxhy(-273.15℃) ( ) 信誉:110 Blog 2006-10-24 10:37:30 得分: 0
9的倍数!
赞!!!Top
39 楼justrun2005(机枪)回复于 2006-10-24 15:43:20 得分 0
这是昨天晚上西工大葡萄城的笔试题啊。
那些题我都做了,第二题那种的确不会超过75次比较。呵呵,楼主是西工大的吧?
我是b卷,求各位和的那个题卷子上没有啊,必作的编程题是求前n个素数和啊,这些题都没啥难度。Top
40 楼rickerliang(专回0分贴(来交流不是为分))回复于 2006-10-24 16:04:44 得分 0
拜~~~~~~~
pcboyxhy(-273.15℃)
之前忽略了Top
41 楼yuanwenbin(学好了,钱多了,美女自然就有了)回复于 2006-10-24 16:13:41 得分 0
pcboyxhy(-273.15℃) ( ) 信誉:110 Blog 2006-10-24 10:37:30 得分: 0
1.输入一个整数.如552.计算其各位的和,直到结果为一位数. 比如552过程为 552-->12-->3
不是9的倍数的,取除以9的余数
9的倍数的就是9
=========================================================
拜一个,这么牛b的方法居然没人关注啊
x*100+y*10+z 是原数,x+y+z是要算的数
x*100+y*10+z = 9*(11x+y)+x+y+z
顶一下,确实是啊Top
42 楼yuanwenbin(学好了,钱多了,美女自然就有了)回复于 2006-10-24 16:17:42 得分 0
第一题
#include <iostream>
using namespace std;
int seperateNum(int n,int sBuf[],int nLen)
{
int nTemp=n;
int i=0;
while((nTemp>=10)&&(i<nLen-1))
{
sBuf[i++]=nTemp%10;
nTemp=nTemp/10;
}
sBuf[i++]=nTemp;
return i;
}
int getSum(int sBuf[],int n)
{
int nRet=0;
for(int i=0;i<n;i++)
{
nRet+=sBuf[i];
}
return nRet;
}
void printResult(int sBuf[],int n,int nValue)
{
for(int i=n-1;i>=0;i--)
{
cout<< sBuf[i];
}
cout<<"\n";
cout<<nValue;
cout<<"\n\n";
}
int _tmain(int argc, _TCHAR* argv[])
{
int sBuf[10];
const int N=1234567;
int n=N;
int nLen;
while(n>10)
{
nLen=seperateNum(n,sBuf,10);
n=getSum(sBuf,nLen);
printResult(sBuf,nLen,n);
}
return 0;
}
是 n > 9 拉
Top
43 楼weakend(0912)回复于 2006-10-24 16:33:28 得分 0
pcboyxhy(-273.15℃)
不是9的倍数的,取除以9的余数
9的倍数的就是9
///////////
其中第二句对吗?
比如545454,应该为545454->27->9
pcboyxhy(-273.15℃)的方法就是545454->9了。
Top
44 楼weakend(0912)回复于 2006-10-24 16:46:23 得分 0
还有:
pcboyxhy(-273.15℃)
不是9的倍数的,取除以9的余数
9的倍数的就是9
///////////
其中第一句
比如545455,应该为545455->28->10-〉1
pcboyxhy(-273.15℃)的方法就是545454->1了,其中直接就到1了。
题目的本意应该是一步一步的把每个数都输出吧...
Top
45 楼xdspower(杂食菜熊)回复于 2006-10-24 17:19:51 得分 0
1.除了0是特例,就符合pcboyxhy(-273.15℃)的结论,这个在wulei5482(忍者) 的帖子中有解释,不过他还是没有考虑特例问题。此外解释中没有指出这是一个递归解释,即
x*100+y*10+z = 9*(11x+y)+x+y+z,无论x+y+z是否大于10,都可以构造出“新的”x、y和z来满足这个公式,而且这个是可以扩展为无穷位的,比如m*1000+x*100+y+10+z=9(111m+11x+y)+m+x+y+z,这样结论就出来了设这个处理过程为f(),则y=f(x)有 若x=0,y=0;否则若 x%9=0,y=9;否则y=x%9。
Top
46 楼xddzccn(一个人旅行)回复于 2006-10-24 17:23:36 得分 0
第一个题做过了,不难
后面的就有点不懂了Top
47 楼xddzccn(一个人旅行)回复于 2006-10-24 17:26:03 得分 0
一个学校的食堂餐卡系统,在使用前对其进行测试,请设计尽可能多的测试用例..
---------------------------
-----------------------------
以下为有损测试过程
一,以任何角度掰成两半,测试半卡性能
需要测试的数据:1,掰断的平均力度。建议设置在女生稍微用力就能弄断为最佳
2,裂纹轨迹。尽量使裂纹往电路(或者卡里面的主要单元)那边靠,
以免流行半卡主义
二,
上学期我的卡就掉到了读卡机里面了,拿出来的时候就只有一半了
郁闷害我又花了12块钱买了一张卡Top
48 楼weakend(0912)回复于 2006-10-24 17:33:35 得分 0
pcboyxhy(-273.15℃)对于第一题的解法很不妥,题目的本意是想得到如下效果:
Input a Integer:552
552->12->3
Input a Integer:5454
5454->18->9
但是用pcboyxhy(-273.15℃)的方法是得不到这个结果的,直接到最后一个数了,他用了 同余 的原理,很高明,但违背原题本意。Top
49 楼leibo3008(渔民)回复于 2006-10-25 11:34:42 得分 0
leibo3008(渔民) ( ) 信誉:100 Blog 2006-10-24 12:45:00 得分: 0
第二题:用下面的程序只需比较(50-2)*3/2+1=73次。
和weakend的有点像,但好像不用判断奇偶吧。
/////////////////////////////////////////////////////////////////////////////
初始时是要讨论奇偶的。不然leibo3008(渔民)的程序只能对偶数起作用(比如此题的50)。
完毕。
########################################################
哦,明白了,谢谢,呵呵!Top
50 楼birdscut()回复于 2006-10-25 13:11:34 得分 0
第一题:偶自己编得,虽然不好,也能做出结果来
#include <iostream.h>
#include <math.h>
void main()
{
int a,t=0;
int s;
int i,j;
cin>>a;
do
{
for(i=10,j=0;a/i>=1;i=i*10,j++)
{
}
t=0,s=a;
for(int m=pow(10,j);j>0;j--,m=pow(10,j))
{
t+=s/m;
s=s-(s/m)*m;
}
t+=s;
a=t;
}
while(t>=10);
cout<<t;
}Top
51 楼enderjiang()回复于 2006-10-25 13:58:36 得分 0
markTop
52 楼tfrist(tfrist)回复于 2006-10-25 14:11:05 得分 0
IP 是指令寄存器,
+1 也就是跳过了一条指令,
结果就是 i += 5; 没有执行,
直接执行 i -= 7;
最后得到 i = 10-7 = 3
其实我认为出这道题的人 脑子一定有问题!这是在考什么,说汇编有点太勉强,说c根本就不着边!还在用ip自加,ip自加后轻则运算错误,重则程序崩溃。Top
53 楼watermelontx(晨曦)回复于 2006-10-25 16:11:21 得分 0
第二道, 用冒泡法..Top
54 楼watermelontx(晨曦)回复于 2006-10-25 16:14:37 得分 0
我还以为是要排序呢..看错了.支持上面的.Top
55 楼iicup(双杯献酒)回复于 2006-10-26 09:34:43 得分 0
1.输入一个整数.如552.计算其各位的和,直到结果为一位数. 比如552过程为 552-->12-->3
设为N, 如果N==0, 结果为0
否则 设n = N%9
如果 n==0 则结果为 9
否则 结果为 n
int AddX(int N)
{
if(N==0) return 0;
int n = N%9;
if(n==0) return 9;
else return n;
}
2.有50个连续的存储单元存有50个数,如果用顺序选择法找出最大值和最小值,则至少要进行97次比较.
请给出其他方法,要求要比较次数要少于97次.(当然越小越好)
如果一个数小于当前最小值,则不可能同时又大于当前最大值,
这样就可以节约一些寻找最大值的比较.
3.
有如下程序段.
int i = 10;
i += 5;
i -= 7;
当程序执行完第一行时,受到电磁波的影响,cup的IP的值加1.问最后i 的值为多少?
代码是C语言,IP是汇编(机器)语言,不是一个级别,
所以结果未知。
最大的可能是i的值不变,程序崩溃。Top
56 楼hziee_()回复于 2006-10-27 16:08:05 得分 0
2,
int min,max;
min = max = arry[0];
for( int i=1; i<50; i++)
{
if( array[i]<min)
min = array[i];
else if(arry[i]>max)
max = array[i];
}
//最多比较98次,最少49次.Top
57 楼hziee_()回复于 2006-10-27 16:11:44 得分 0
不对,题目要求不超过97次
所以
if (array[0] < array[1])
min = array[0];max = array[1];
else
min = array[1],max = array[0]
for( i=2; i<50; i++)
...
...Top
58 楼hziee_()回复于 2006-10-27 16:14:01 得分 0
第一提没那么简单,因为整数位数未知,所有
要用第规做.Top
59 楼lmlmlmnew()回复于 2006-10-27 17:05:04 得分 0
第一题.....
int i;
int temp;
int sum;
sum = 0;
temp = 0;
i = 512;
while (i > 0)
{
temp = i - i / 10 * 10;
sum += temp;
i = i / 10;
}
printf("%d", sum);
用啥递归阿...
int i = 10;
0040101E mov dword ptr [i],0Ah
i += 5;
00401025 mov eax,dword ptr [i]
00401028 add eax,5
0040102B mov dword ptr [i],eax <--------这里开始吧?
i -= 7;
0040102E mov eax,dword ptr [i]
00401031 sub eax,7
00401034 mov dword ptr [i],eax
i的值不一定 结果是 i-7Top
60 楼ugvihc(maybe good good study, hope day day up!)回复于 2006-10-27 17:22:21 得分 0
markTop
61 楼hziee_()回复于 2006-10-27 17:23:16 得分 0
第规这样做
#include <iostream>
#include <time.h>
using namespace std;
int add_x( int n)
{
if( n<10)
return n;
int nn = 0;
while( n>0)
{
nn += n%10;
n /=10;
}
cout<<nn<<" ->";
add_x(nn);
}
int main()
{
srand( time(NULL) );
int inter = rand();
cout<< inter <<endl;
cout<< add_x( inter);
system("pause");
}Top
62 楼lmlmlmnew()回复于 2006-10-27 18:27:00 得分 0
刚才错了.... >.<
int i = 10;
0040101E mov dword ptr [i],0Ah
i += 5;
00401025 mov eax,dword ptr [i]
00401028 add eax,5 跳过这个
0040102B mov dword ptr [i],eax <--------IP
i -= 7;
0040102E mov eax,dword ptr [i]
00401031 sub eax,7
00401034 mov dword ptr [i],eax
i =-2Top
63 楼zhenhaojia(真好记)回复于 2006-10-27 18:31:17 得分 0
第一题:
1.如果数字小于10, return
2.转换数字到字符串。
3.加上没一位形成新的数字,转1
第二题:锦标赛比较法;就像乒乓球淘汰赛。
第三题:不知道
Top
64 楼wang430903(味觉全无)回复于 2006-10-27 19:14:49 得分 0
pcboyxhy(-273.15℃)
Top
65 楼Windy83()回复于 2006-10-27 22:38:53 得分 0
int f(int i)
{
int sum;
while(i>9)
{
sum=0;
while(i>0)
{
sum+=i%10;
i=i/10;
}
i=sum;
}
return i;
}Top
66 楼eimhee()回复于 2006-10-27 23:25:19 得分 0
题目1
#include <stdio.h>
int convert(int x);
int main() {
int k;
int p=0;
scanf("%d",&k);
do {
k=convert(k);
}while(k>10);
printf("%d",k);
}
int convert(int x) //计算各位之和
{
int t=0;
while(1) {
t=t+x%10;
x=x/10;
if(x<1) {
break;
}
}
return t;
}Top
67 楼iambic()回复于 2006-10-28 00:01:20 得分 0
哪边的面试题,挺有含量的。Top
68 楼wlxin()回复于 2006-10-28 09:40:37 得分 0
第一题:
int cal(int n)
{
int sum ,nTemp,i;
nTemp = n;
while(1)
{
i = 1;
sum = 0;
printf("nTemp = %d\r\n",nTemp);
while (nTemp/i/10 != 0)
{
sum+=nTemp%(i*10)/i;
i*=10;
if(0 == nTemp/i/10)
{
sum+=nTemp/i;
}
}
nTemp = sum;
if (sum < 10)
break;
}
return sum;
}
void main()
{
int n,
scanf("%d",&n);
cout<<cal(n)<<endl;
return;
}
第二题主要是排序思路,其实很简单,50个数分为25组,第一组一次比较选出最大的max和最小的min,以后每组的最大和最小的分别和max和min比较,每组最多比较3次,所以有1+24×3=73次比较Top
69 楼ancjf(阿飞)回复于 2006-10-28 21:02:43 得分 0
1
#include<iostream>
using namespace std;
mian()
{
int a;
cin>>a;
cout<< (a%9 ? a%9 : 9);
}Top
70 楼overlv()回复于 2006-10-29 12:11:42 得分 0
二分法排序
俺是新手
然后输出第一位和最后一位Top
71 楼wucanbi()回复于 2006-10-29 12:31:16 得分 0
面试大都考的数据结构方面么Top




