骷髅头病毒音乐名字:急!(最后半天了)!!学过C++的请进

来源:百度文库 编辑:高考问答 时间:2024/05/11 02:01:55
我有一个朋友(女的),12月22号(周四)晚上要进行选修课(就是C++)期末考试了.下面是她老师报出的考试题,望各位高手帮忙弄弄,让我在她面前有个表现的机会,拜托了!
1,不用循环结构,编程实现“画一条横线”的递归算法。
2,试用递归方法:改造“求最大公因数”的秦九韶算法,所设计程序用于不 仅限于int型范围的自然数。
3,任给n(2<n<11)个自然数,试编程实现:
使重新排列后的各数有如下性质:
1)第1,2位置者>=第3,4位置者>=....>=第n-
3,n-2位置者>=第n-1,n位 置者
2)偶数位置者>=奇数位置者

补充一点,答案不要太复杂哈,她是个菜鸟,只学过这一个学期(我怀疑她是去混学分的)。

拜托了,我下半辈子的幸福就交给你们了。
问题补充:秦九韶算法:是给定两个数A和B,用较大的数减去较小的数|A—B|来替换其中较大者,依次循环就得到公因数。如6和8,8-6=2,帮用2去替8,再用6和2再来一次替换。。。依次替换最后得到相等的两个数,就是公因数了。

有个朋友帮我做了一次,可惜我发现那几个程序都没法运行(可能是我太笨了)。而我又修改不来,惨。最后半天了,望有空的朋友帮我做做(最好是原原本本的一个完整程序,这样我到时候直接给她看就行了)。就这百来十分了,无以为报,只好说声“谢谢了,预祝你圣诞快乐,新年快乐!”。

1.
//x1为起点x坐标,x2为终点x坐标,因为是横线,所以只有一个y坐标
void Line(int x1, int x2, int y)
{
if(x1 < x2)
Line(x1 + 1, x2, y);
SetPixel(x1, y);//此为画点函数,在(x1,y)处画点,把你自己的画点函数替换就可以了
}

2.
int MaxFactor(int x, int y, int& factor)
{
int min = x;
int max = y;
if(x != y)
{
if(x > y)
{
min = y;
max = x;
}
MaxFactor(min, max - min, factor);
}
else
{
factor = x;
}
return factor;
}

3.这题不想写了,楼上有位老兄写了写不知所云的东西:)
你将n个数依次从大到小排好序,就满足了你的第一个要求了,然后在把依次两个元素交换位置(1和2交换,3和4交换...)就满足了你的第二个要求

现在有空顺便也写了,vc6下调试通过
#include <stdio.h>

void Sort(int *in, int n);
void Swap(int& a, int& b);

int main(int argc, char* argv[])
{
int a[5] = {5, 3, 8, 10, 22};

Sort(a, 5);
for(int i = 0; i < 5; i += 2)
{
if(i < 5 - 1)
Swap(a[i], a[i+1]);
}

for(int j = 0; j < 5; j++)
printf("%d\n", a[j]);

return 0;
}

void Swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}

void Sort(int *in,int count)
{
int i,j,x;
int temp;
for(i=1;i<count;i++)
{
for(x=0;x<i;x++)
{
if((*(in+i))>=(*(in+x)))
break;
}
temp=*(in+i);
for(j=i;j>x;j--)
{
*(in+j)=*(in+j-1);
}
*(in+x)=temp;
}
}

#include<iostream.h>
#include<iomanip.h>
#include<string.h>

#define _GOLD 2 //标志有金子的格子
#define _TRAP 3 //标志有陷阱的格子
#define _OBSTACLE 4 //标志有障碍物的格子

class simgame
{
public:
simgame(char *nm,int);
void terminate(){delete []name;};
void init(int data[],int n);
void run();
void display();
private:
char *name;
int way[50]; //标志环道格子种类的数组
int location;
int life;
int money;
int isdead; //判断是否死亡
int isforward; //判断是顺行还是逆行
};

simgame::simgame(char *nm,int isfd=1)
{
strcpy(name,nm);
isforward=isfd;
location=0;
life=money=100;
isdead=0;
}

void simgame::init(int data[],int n)
{
int nn=0; //用于循环data数组以保证把way数组完整赋值
int i;
way[0]=0;
if(isforward)
{
for(int i=1;i<50;i++)
{
if(nn=n)nn=0; //如果data数组到达末尾,从头开始
way[i]=data[nn];
nn++;
}
}
else
{
nn=n-1;
for(i=1;i<50;i++)
{
if(nn<0)nn=n-1;
way[i]=data[nn];
nn--;
}
}
}

void simgame::display()
{
cout<<"老鼠"<<name<<":";
if(life>0)
{
cout<<"位置="<<setw(5)<<location;
cout<<"生命="<<setw(5)<<life;
cout<<"金钱="<<setw(5)<<money;
}
else
cout<<"Dead!";
}

void simgame::run()
{
int i;
int isstop=0;
if(isdead)return;
if(isforward) //正常行走的过程
{
for(i=1;i<5;i++)
{
if(location+i==50)
location-=50; //如果到达末尾则从头开始走,并把位置变量重新赋值
if(way[location+i]==_OBSTACLE) //如果途中有障碍物,则停止
{
location+=i;
isstop=1; //标志,表示是否停留
break;
}
}
if(!isstop)
location+=4;
switch(way[location])
{
case _GOLD:money+=50;break;
case _TRAP:life-=80;break;
default:break;
}
if(life<=0)isdead=1;
}
else //逆行的过程
{
for(i=1;i<4;i++)
{
if(location+i==50)
location-=50;
if(way[location+i]==_OBSTACLE)
{
location+=i;
isstop=1;
break;
}
}
if(!isstop)
location+=3;
switch(way[location])
{
case _GOLD:money+=50;break;
case _TRAP:life-=80;break;
default:break;
}
if(life<=0)isdead=1;
}
}

void main()
{
simgame mice1("A");
simgame mice2("B",0);
int data[20]={1,2,2,2,3,2,3,4,1,2,3,4,1,2,3,4,3,2,2,1};
mice1.init(data,20);
mice2.init(data,20);
for(int i=0;i<5;i++)
{
mice1.run();
mice2.run();
cout<<"轮次:"<<i+1<<endl;
mice1.display();
mice2.display();
}
mice1.terminate();
mice2.terminate();
}