求大神解答C语言难题!!!!!

q6631303 2012-09-08 08:15:30
1,有一种特别的计算机,它有 10 个寄存器和 1000 个字长的内存。每个寄存器和内存单元中都可以存储一个 3 位的整数(0~999)。这种计算机的指令都被编码为 3 位整数,并存储在内存中。指令编码后的含义如下:

* 100 终止

* 2dn 将寄存器 d 设定为 n(0~9之间)

* 3dn 把 n 与寄存器 d 中的值相加并存储在寄存器 d 中

* 4dn 把 n 与寄存器 d 中的值相乘并存储在寄存器 d 中

* 5ds 将寄存器 s 中的值赋给寄存器 d

* 6ds 将寄存器 s 中的值与寄存器 d 中的值相加并存储在寄存器 d 中

* 7ds 将寄存器 s 中的值与寄存器 d 中的值相乘并存储在寄存器 d 中

* 8da 将寄存器 a 所指的内存地址中的数据读取到寄存器 d 中

* 9sa 把寄存器 s 中的数据保存到寄存器 a 所指的内存地址中

* 0ds 如果寄存器 s 非零,就跳转到寄存器 d 所指的地址中

开始时,所有的寄存器都是 000,而内存的数据则通过标准输入读入。该计算机从内存地址 0 开始执行,而每条指令执行的结果都要对 1000 取模。

输入

输入的第一行是一个正整数,它表示在输入中有多少组数据,每一组数据前都有一行空白。

每一组数据最多有 1000 条,它们表示内存中从地址 0 开始存储的数值。没有指定的内存中存储的数据都是 0。

输出

对于每一组数据,输出该计算机在执行过程中一共处理了多少条指令(包括终止指令),你可以假设程序最终一定会停止。在输出的每一组结果之间,都要增加一个空行。
2,Description
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。

于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。

他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。

Input
输入文件有两行数据,第一行是车厢总数N(不大于10000),第二行是N个不同的数表示初始的车厢顺序。


Output
一个数据,是最少的旋转次数。

Sample Input
4
4 3 2 1

Sample Output
6


3,你知道什么是骰子(俗称色子)吗?骰子是一个六面立方体,每一面对应一到六的数字,并且在每个面上用相应的点表示数字。

游戏开始时,骰子平稳的放在桌上,游戏中,骰子可由庄家决定向任何方向滚动。如果你能猜出骰子停止滚动时朝上面的数字,你就赢了。

现 在要求你编写一道程序来模拟骰子的滚动。为了简单起见,我们假设骰子既不滑动也不会跳动,只在桌子上向四个方向滚动,即东南西北。当游戏开始时,庄家都把 骰子放在桌子中央并使它的一、二、三分别对应上、北和西。对于另外的三个面,可以通过一条规则计算出来:任何相对的两面的和都等于七。

你的 程序应能接受一系列的输入命令,任何一条命令应是“north”、“east”、“south”或“west”之一。“北”命令即指骰子滚向北面,也就是 说,朝向上的面成为了新的北面,而原来的北面则成为了新的底。其它命令也相应地使骰子滚向对应的方向。你的程序必须算出骰子经过一系列滚动后面朝上的数 字。设桌子足够大,骰子永远不会掉下。

输入
输入包括一或多个命令序列,每一次对应新游戏的开始。命令序列的第一行是表示命令条数的整数。你可以假设命令条数不超过1024。输入零表示输入结束。每一行命令包括“north”、“east”、“south”和“west”之一。你可以假设不会出现空白行。

输出
对于每一个命令序列,程序输出游戏结束时骰子朝上的面的数字。

求大神解答哈,本人C语言小菜实在不会==


...全文
358 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weir_007 2012-09-11
  • 打赏
  • 举报
回复
嗯。。。第二题只要冒泡就行了,至于第一题嘛,输入是道坎儿,理解也不容易,赵丰年当初上计导就没听进去几句真东西,程设这货是挺蛋疼,我也正愁呢,估计明天又要开新题了。
smsgreenlife 2012-09-11
  • 打赏
  • 举报
回复
我觉得题目说的很严密、很详细,怎么就没法看了!?
第一题不太懂,第二题用冒泡排序或者选择排序的思想实现很简单,我就不写代码了,下面是第三题的代码:
运行结果如下:
2
south
east
3
0
Press any key to continue


#include <stdio.h>

void main()
{
int n;
char p[10];
char c[1024];

while(true)
{
scanf("%d", &n);
if(n==0)
{
return;
}
int i;
scanf("\n", &i);
for(i=0; i<n; ++i)
{
gets(p);
c[i] = *p;
}

int up = 1;
int down = 6;
int north = 2;
int west = 3;
int east = 4;
int south = 5;
int *p1;
int *p2;
int *p3;
int *p4;

p2 = &down;
p4 = &up;

for(i=0; i<n; ++i)
{
if(c[i] == 'n')
{
p1 = &north;
p3 = &south;
}
if(c[i] == 's')
{
p1 = &south;
p3 = &north;
}
if(c[i] == 'e')
{
p1 = &east;
p3 = &west;
}
if(c[i] == 'w')
{
p1 = &west;
p3 = &east;
}
int temp;
temp = *p1;
*p1 = *p4;
*p4 = *p3;
*p3 = *p2;
*p2 = temp;
}
printf("%d\n", up);
}
return;
}
ARMBULL 2012-09-11
  • 打赏
  • 举报
回复
实在没法看了.重新发把.
jsmouse 2012-09-10
  • 打赏
  • 举报
回复
太长了,都没看
DataChat.Club 2012-09-10
  • 打赏
  • 举报
回复
第二题是冒泡排序吧?
sjmp 2012-09-09
  • 打赏
  • 举报
回复
哥们,不好意思,你这问题太长了,看了就烦,你认为有人会耐心看完??
赵4老师 2012-09-09
  • 打赏
  • 举报
回复
《计算机组成原理》
sunseas 2012-09-09
  • 打赏
  • 举报
回复
是长了,看了几行就受不了。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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