描述:
实现简易字符串压缩算法:一个长度最大为128的字符串,由字母a-z或者A-Z组成,将其中连续出现2次以上(含2次)的字母转换为字母和出现次数,以达到压缩目的。
运行时间限制:
无限制
内存限制:
无限制
输入:
输入字符串,最大长度128
输出:
输入字符串
样例输入:
AAAABBBB
样例输出:
A4B4
答案提示:
#include
#include
#include
int main ()
{
char str[128],str1[256];
int i;
int len;
gets(str);
for(i=0;i<256;i++){
str1[i]=0;
}
len=strlen(str);
i=0;
while(i
{ if(str[i]-’a'<26 && str[i]-’a'>=0 || str[i]-’A'<26 && str[i]-’Z'>=0){
str1[(int)str[i]]++;
}
i++;
}
i=0;
while(i
if(str1[(int)str[i]]==1){
printf(“%c”,str[i]);
}else if(str1[(int)str[i]]>1 ){
printf(“%c%d”,str[i],str1[(int)str[i]]);
i=i+str1[(int)str[i]]-1;
}
i++;
}
return 0;
}
竞赛积分猜想
描述:
某公司举办了知识竞赛。题目的计分规则如下:
1.每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前得到的分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
2.每位选手都有一个起步的分数为10分。
程序要求:
如果某获胜选手最终得分是X分,如果不让你看比赛过程,请推断出他(她)哪个题目答对了,哪个题目答错了吗?把答对的题目记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是一种可能的情况,10道题目的编号从左到右依次排列。
你的任务是算出满足该得分的所有可能情况,答案之间用|号分隔,并且答案需要进行排序,将答案转换为十进制后数字小的排在前面,即0010110011应该排在1010110011的前面。如果不存在满足该分数的情况,则输出10个0:0000000000
运行时间限制:
无限制
内存限制:
无限制
输入:
选手的得分,正整数。
输出:
满足输入得分的所有可能的情况,答案之间用|号分隔,并且答案需要进行排序,将答案转换为十进制后数字小的排在前面,即0010110011应该排在1010110011的前面。如果不存在满足该分数的情况,则输出10个0:0000000000
样例输入:
100
样例输出:
0010110011|0111010000|1011010000
答案提示:
#include
using namespace std;
int count =0;
int j = 0;
void fun(int n,int score)
{
int a[11],i=1,k=512,sum=10;
while(i<11)
{
a[i] = (n/k)%2;
sum = a[i] sum*2 : sum-i;
k /= 2;
i++;
}
if(sum == score)
{
count++;
if (j != 0)
cout << ‘|’;
for(i=1;i<11;i++)
cout << a[i];
j=1;
}
}
int main()
{
int i,score;
cin >> score;
for(i=0;i<1024;i++)
fun(i,score);
if (count == 0)
cout << “0000000000″ << endl;
return 0;
}
Word Maze(单词迷宫)
描述:
Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f。
但现在你的任务可没有这么简单,你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。
如下图,指定W为”SOLO”,则在地图中红色标注了单词”SOLO”。
注意区分英文字母大小写,你只能上下左右行走。
运行时间限制:
无限制
内存限制:
无限制
输入:
输入第一行包含两个整数n、m(0
输出:
如果能在地图中连成给定的单词,则输出”YES”,否则输出”NO”。
注意:每个字母只能用一次。
样例输入:
5 5
SOLO
CPUCY
EKLQH
CRSOL
EKLQO
PGRBC
样例输出:
YES
答案提示:
#include
#include
int m,n;
char mz[30][30];
int vis[30][30];
char wd[110];
int len;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
int dfs(int x, int y, int d){
if (d == len – 1) return 1;
for (int i = 0; i < 4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && ny >= 0 && nx < n && ny < m && !vis[nx][ny] && mz[nx][ny] == wd[d+1]) {
vis[nx][ny] = 1;
if (dfs(nx , ny, d+1)) return 1;
}
}
return 0;
}
int main(){
//freopen(“a.txt”, “r”, stdin);
while (scanf(“%d%d”, &n, &m) != EOF) {
scanf(“%s”, wd);
len = strlen(wd);
for (int i = 0; i < n; i++)
scanf(“%s”, mz[i]);
int ok = 0;
for (int i = 0; i < n && !ok; i++)
for (int j = 0; j < m && !ok; j++) {
if (wd[0] == mz[i][j]) {
memset(vis, 0, sizeof vis);
vis[i][j] = 1;
if (dfs(i, j, 0)) ok = 1;
}
}
printf(“%s\n”, ok “YES”: “NO”);
}
return 0;
}