数学与计算机学院
上机报告
( 2015 / 2016 学年 第 2 学期 )
课程名称计算机类竞赛专题训练课程代码上机时间2016年03月29日指导单位计算机与软件工程学院任课教师蒋忠远
学生姓名蒋琦年 级2013级学 号3120130901327专 业计算机科学与技术成 绩
实验名称上机ACM习题练习实验地点6A-403实验类型实验学时2实验日期2016.03.29实验目的和要求
实验目的:
1. 掌握部分ACM竞赛题的算法。
实验要求:
1.给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现的O的个数,X的得分为0.例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3.
2.输入整数a和b(0<=a<=3000,1<=b<=3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为0.(116279069767441860465),循环节长度为21.
3.输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。
4.编写一个“裁判”程序,输入单词和玩家的猜测,判断玩家赢了(You win.)、输了(You lose.)还是放弃了(You chickened out.)。每组数据包含3行,第1行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。后两行保证只含小写字母。
实验环境(实验设备)
Windows 7 + Visual C++ 6.0
实验原理及内容
1.实验原理
1、创建2个字符串一个用于存放字符串,一个用于存放需要相加的大小,判断第一个元素为0还是1.然后使用循环当遇到O时所数组的值便在前一个的基础上加1当遇到X时归0继续计算。最后将存放大小的数组全部相加。
2、一直相除,当遇到商相同的时候说明为一个循环,然后计算长度。
3、短串的第一个字符,去比较长传的第一个字符,如果相同,则转向短串的下一个字符,去个长串的下一个字符比较,如果不同,则接着和长串的下一个字符比较,重复这样的过程,次数为长串的长度,如果能够遍历短串的长度。则成功,否则失败。
4、通过两个变量来判断游戏的输赢,经过循环来查看字母是否猜对,将猜对的字母改成空格。
2.实验内容
1.给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现的O的个数,X的得分为0.例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3.
2.输入整数a和b(0<=a<=3000,1<=b<=3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为0.(116279069767441860465),循环节长度为21.
3.输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。
4.编写一个“裁判”程序,输入单词和玩家的猜测,判断玩家赢了(You win.)、输了(You lose.)还是放弃了(You chickened out.)。每组数据包含3行,第1行是游戏编号(-1为输入结束标记),第2行是计算机想的单词,第3行是玩家的猜测。后两行保证只含小写字母。
3.实验前准备
打开vc++6.0,建立相关控制台应用程序,为编程做准备。
4.实验过程
1.给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现的O的个数,X的得分为0.例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3.
#include
using namespace std;
int main()
{
char a[100];
int b[110];
int n;
cin>>n;
while(n--)
{
cin>>a;
b[0]=(a[0]=='O');
for(int i=1;a[i];i++)
{
b[i]=b[i-1]+1;
if(a[i]=='X')
b[i]=0;
}
int sum=0;
for(int i=0;a[i];++i)
sum+=b[i];
cout<
}
return 0;
}
2.