工大在线

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2878|回复: 26
打印 上一主题 下一主题

[分享] 第六届编程大赛试题

[复制链接]

94

主题

5

好友

1182

积分

荣誉会员

Rank: 8Rank: 8

该用户从未签到

西工币
7832 枚
好评度
2 点
声望
648 点
注册时间
2008-1-3
帖子
841
积分
1182
UID
13745

终身成就奖 特殊贡献奖 论坛元老 音乐天才 金牛座 辰龙 MVP 音乐达人

跳转到指定楼层
#
发表于 2008-4-23 07:43:56 |只看该作者 |正序浏览




初赛试题
(总分150分)
考生须知:
1)考生必须注明每道试题所用的语言,无声明的以零分计算。
2)答案复制到一Word文档中,并以考生的姓名及学号命名该文档保存在桌面。
3)考试中请遵守考试规则。
1.选择题(20分)
有三白子和三黑子如下布置:
○ ○ ○ . ● ● ●
的目的是用最少的步数将中白子和黑子的位置行交
● ● ● . ○ ○ ○
规则是:(1)一次只能移棋子; (2)棋子可以向空格中移,也可以跳个对方的棋子入空格,但不能向后跳,也不能跳过两个子。
阅读如下程序:
#include<stdio.h>
int number;
void print(int a[]);
void change(int *n,int *m);
int main()
{
int t[7]={1,1,1,0,2,2,2}; /*初始化数组1:白子 2:黑子 0:空格*/
int i,flag;
print(t);
while(t[0]+t[1]+t[2]!=6||t[4]+t[5]+t[6]!=___(1)___) /*判断游戏是否结束
若还没有完成棋子的交换则继续进行循环*/
{
flag=1; /*flag 为棋子移动一步的标记1:尚未移动棋子 0:已经移动棋子*/
for(i=0;flag&&i<5;i++) /*若白子可以向右跳过黑子,则白子向右跳*/
if(t==1&&t[i+1]==2&&t[i+2]==___(2)___)
{change(&t,&t[i+2]); print(t); flag=0;}
for(i=0;flag&&i<5;i++) /*若黑子可以向左跳过白子,则黑子向左跳*/
if(t==0&&t[i+1]==1&&t[i+2]==2)
{change(&t,&t[i+2]); print(t); flag=0;}
for(i=0;flag&&i<6;i++) /*若向右移动白子不会产生阻塞,则白子向右移动*/
if(t==1&&t[i+1]==0&&(___(3)___))
{change(&t,&t[i+1]); print(t);flag=0;}
for(i=0;flag&&i<6;i++) /*若向左移动黑子不会产生阻塞,则黑子向左移动*/
if(t==0&&t[i+1]==2&&(i==5||t[i-1]!=t[i+2]))
{ change(&t,&t[i+1]); print(t);flag=0;}
}
}
void print(int a[])
{
int i;
printf("No. %2d:.............................\n",number++);
printf(" ");
for(i=0;___(4)___;i++)
printf(" | %c",a==1?'*':(a==2?'@':' '));
printf(" |\n .............................\n\n");
}
void change(int *n,int *m)
{
int term;
term=*n; *n=*m; ___(5)___;
}
从下面的选项中选择你认为正确的填入空格{___(1)__}—{___(5)___}内:
A.*m=term B.i==0||t[i-1]!=t[i+2] C.3 D.6 E.0 F. i==0||t[i+1]!=t[i+2]
G.i<=6
H.
i==0||t!=t[i+2]
I.i<=5
J.i<=3
K.
term=*m
L.term=*n
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0 顶!~顶!~0 扔鸡蛋~扔鸡蛋~0

18

主题

0

好友

93

积分

秀才

Rank: 3Rank: 3

该用户从未签到

西工币
2151 枚
好评度
0 点
声望
41 点
注册时间
2007-4-23
帖子
72
积分
93
UID
9687
26#
发表于 2008-5-14 19:33:45 |只看该作者
原帖由 dixnuits 于 2008-5-10 21:38 发表


决赛的题我做了,今天上班的时候,趁领导不在,偷偷摸摸写的,很乱,但实现功能没问题.

上班这么严呀.对了,现在你在搞网络,做网页吗??是什么网络公司呢?能不能给学弟偷漏下??
我的西安工大~~~~~~
回复

使用道具 举报

7

主题

0

好友

254

积分

举人

Rank: 4

该用户从未签到

西工币
759 枚
好评度
0 点
声望
235 点
注册时间
2006-9-12
帖子
136
积分
254
UID
3052
25#
发表于 2008-5-10 21:38:53 |只看该作者
原帖由 bigice803 于 2008-5-10 21:25 发表
这里这么热闹呀!
为什么决赛那边没这里热闹?看来决赛的题还是有些难了……


决赛的题我做了,今天上班的时候,趁领导不在,偷偷摸摸写的,很乱,但实现功能没问题.
回复

使用道具 举报

7

主题

0

好友

254

积分

举人

Rank: 4

该用户从未签到

西工币
759 枚
好评度
0 点
声望
235 点
注册时间
2006-9-12
帖子
136
积分
254
UID
3052
24#
发表于 2008-5-10 21:38:06 |只看该作者
原帖由 夜色温柔 于 2008-5-10 21:06 发表


呵呵,这个其实并非C#专有,在.NET Framework 类库中,其C++语法表示为:
public:static String^ System::Convert::ToString (nt value, int toBase)
程序集:mscorlib(在 mscorlib.dll 中)


恩 是.NET类库里的

我对.NET也是初学,类都记不清楚,不停要看MSDN,毕竟不是这个专业.(我现在做网络的)

各种语言都会点,但都不精通.
回复

使用道具 举报

18

主题

0

好友

93

积分

秀才

Rank: 3Rank: 3

该用户从未签到

西工币
2151 枚
好评度
0 点
声望
41 点
注册时间
2007-4-23
帖子
72
积分
93
UID
9687
23#
发表于 2008-5-10 21:25:43 |只看该作者
这里这么热闹呀!
为什么决赛那边没这里热闹?看来决赛的题还是有些难了……
我的西安工大~~~~~~
回复

使用道具 举报

7

主题

0

好友

199

积分

举人

Rank: 4

该用户从未签到

西工币
7896 枚
好评度
3 点
声望
325 点
注册时间
2006-5-27
帖子
33
积分
199
UID
278
22#
发表于 2008-5-10 21:06:20 |只看该作者
原帖由 dixnuits 于 2008-5-10 17:20 发表

用栈实现还是最有效率的.

我现在在用C#,更简单,呵呵
System.Convert.ToString(int value, int toBase)
即可解决问题,任意进制的转换.


呵呵,这个其实并非C#专有,在.NET Framework 类库中,其C++语法表示为:
public:static String^ System::Convert::ToString (nt value, int toBase)
程序集:mscorlib(在 mscorlib.dll 中)
MM你贵庚 贵姓 贵三围?
回复

使用道具 举报

7

主题

0

好友

199

积分

举人

Rank: 4

该用户从未签到

西工币
7896 枚
好评度
3 点
声望
325 点
注册时间
2006-5-27
帖子
33
积分
199
UID
278
21#
发表于 2008-5-10 20:57:17 |只看该作者
嗯   看来我疏忽了   先把程序改一下
#include <math.h>
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
                      char a[2] = {'+','-'};       
                      vector<int> o;
        int k = 0,x = 0;
        cin>>x;
                       if( x < 0)
                k = 1;
        x = abs(x);
        while(x != 0)
        {
        if((x&1) == 1)
                o.push_back(1);
        else
                o.push_back(0);
        x=x>>1;       
        }
        cout<<a[k];
                for(vector<int>::reverse_iterator it = o.rbegin() ; it != o.rend() ; it++  )
        cout<<*it;
    system("PAUSE");
    return 0;
}

liu19880426同学,你激动个啥,难道我们学校这个编程大赛还只准人说好话了,我提供了一种实现思路,没有详细测试,是我的疏

忽。但是我错了就代表我们的大赛水平很高了?你不会真的认为我们学校的水平已经立于世界之巅,无须提高了吧。
MM你贵庚 贵姓 贵三围?
回复

使用道具 举报

7

主题

0

好友

254

积分

举人

Rank: 4

该用户从未签到

西工币
759 枚
好评度
0 点
声望
235 点
注册时间
2006-9-12
帖子
136
积分
254
UID
3052
20#
发表于 2008-5-10 19:16:38 |只看该作者
这个话题就此打住

我看见那些用火星文的非主流的脑残体

我就觉得恶心
回复

使用道具 举报

7

主题

0

好友

254

积分

举人

Rank: 4

该用户从未签到

西工币
759 枚
好评度
0 点
声望
235 点
注册时间
2006-9-12
帖子
136
积分
254
UID
3052
19#
发表于 2008-5-10 19:11:55 |只看该作者
我反倒认为你 给的初赛的答案 错误百出

用int声明主函数 结尾没有返回值,稍微严格一点的编译器就给你编译错误了.

我不是用C的,我现在工作用的python和C#.

但是我还是有C的基本的常识.
回复

使用道具 举报

7

主题

0

好友

254

积分

举人

Rank: 4

该用户从未签到

西工币
759 枚
好评度
0 点
声望
235 点
注册时间
2006-9-12
帖子
136
积分
254
UID
3052
18#
发表于 2008-5-10 19:09:23 |只看该作者
我倒是没事 把决赛试题做了做

你可以去看看

我可以告诉你 二进制的负数需要说明位数的

int32和int16就完全不同

而且,在C#中转换是包含负数的 默认为 Int32
回复

使用道具 举报

94

主题

5

好友

1182

积分

荣誉会员

Rank: 8Rank: 8

该用户从未签到

西工币
7832 枚
好评度
2 点
声望
648 点
注册时间
2008-1-3
帖子
841
积分
1182
UID
13745

终身成就奖 特殊贡献奖 论坛元老 音乐天才 金牛座 辰龙 MVP 音乐达人

17#
发表于 2008-5-10 18:02:14 |只看该作者
你用你的程序试一下,看负数能表示出来么?

   确定后再说,别说大话~~

               OK?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|xatubbs.com ( 苏ICP备11050183号 )

GMT+8, 2025-8-4 15:52 , Processed in 0.159971 second(s), 28 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部