主题:第58次编程比赛题目——简单猜数字
雨中飞燕 [专家分:18980] 发布于 2007-07-28 18:51:00
题目描述:
猜数字游戏大家玩过没?经典的规则是给出一个四位数,然后你去猜。
如那个数是1357,你猜1234的话,就给出1A1B,这是什么意思呢?
nA表示有n个数的位置猜对了,nB表示有n个数猜对了,但位置不对,
如果你再猜2351当然给出2A1B了,如果你猜2468,那就是0A0B了。
现在,把四位数扩展到n位,由数字扩展到字符,输入两个字符串,你
判断出猜对位置的和猜对了但位置不对的。如abcdefg和aceg123,结
果就是1A3B
输入:
多组测试数据,每组占一行,每行有两个字符串,串长小于10000,用空格分隔开
输出:
输出这两个字符串比较的结果
样例输入:
1357 1234
abcdefg aceg123
AaAa AAaa
121212 2121212211
Qq qqGame
样例输出:
1A1B
1A3B
2A2B
0A6B
1A0B
难度:very easy
要求:
只要把你完整的代码发出来即可,不要输出多余题目没有的内容
其它:
代码基本框架(仅仅作为参考,你可以不使用这个框架自己写):
//C语言
#include <stdio.h>
#define MAX_CHAR_LEN 10001
int main()
{
char str1[MAX_CHAR_LEN],str2[MAX_CHAR_LEN];
while(scanf("%s %s",&str1, &str2) != EOF)
{
//这里写你的计算代码
}
return 0;
}
//C++语言
#include <iostream>
using namespace std;
const int MAX_CHAR_LEN = 10001;
int main()
{
char str1[MAX_CHAR_LEN],str2[MAX_CHAR_LEN];
while(cin>>str1>>str2)
{
//这里写你的计算代码
}
return 0;
}
开始时间7月28日19:00,结束时间7月30日22:00
对题目有疑问的,请到[url]http://www.programfan.com/club/post-244340.html[/url]提出,谢谢
最后更新于:2007-07-29 10:26:00
回复列表 (共24个回复)
11 楼
drownever [专家分:0] 发布于 2007-07-29 18:16:00
#include <iostream>
#include <string>
using namespace std;
const int MAX_CHAR_LEN = 10001;
int main()
{
char str1[MAX_CHAR_LEN],str2[MAX_CHAR_LEN];
while(cin>>str1>>str2)
{
//这里写你的计算代码
int i,j;
int A=0,B=0; bool ff[10001]={0};
for(i=0;i<strlen(str1);i++)
if(str1[i]==str2[i]) {A++; ff[i]=true; }
for( i=0;i<strlen(str1);i++)
if( ff[i]==true )continue;
else
{
for(j=0;j<strlen(str2);j++)
if(str2[j]==true) continue;
else
{
if(str1[i]==str2[j]) { B++; break; }
}
}
cout<<A<<'A'<<B<<'B'<<endl;
}
return 0;
}
12 楼
AntiMicrosoft [专家分:3740] 发布于 2007-07-29 19:44:00
#include <stdio.h>
void cmp(char *p, char *q)
{
int pt[128]={0}, qt[128]={0}, a=0, b=0, *t, i;
while(*p && *q){
if(*p==*q) a++;
pt[*p++]++; qt[*q++]++;
}
if(*p || *q){
t = *p?pt:qt;
p = *p?p:q;
while(*p) t[*p++]++;
}
for(i=0; i<128; i++)
b += pt[i]>qt[i]?qt[i]:pt[i];
printf("%dA%dB\n", a, b-a);
}
int main()
{
char s1[1001], s2[1001];
while(scanf("%s %s", s1, s2)!=EOF)
cmp(s1, s2);
}
13 楼
小黑骑DK [专家分:610] 发布于 2007-07-29 19:51:00
#include <stdio.h>
#include <string.h>
#define MAX_CHAR_LEN 10001
int main(void)
{
char str1[MAX_CHAR_LEN],str2[MAX_CHAR_LEN];
int posFlag[MAX_CHAR_LEN];
int bPosFlag[MAX_CHAR_LEN];
int pos1,pos2,min;
int aCount,bCount;
memset(str1,0,MAX_CHAR_LEN);
memset(str2,0,MAX_CHAR_LEN);
memset(posFlag,0,sizeof(int)*MAX_CHAR_LEN);
memset(bPosFlag,0,sizeof(int)*MAX_CHAR_LEN);
while(scanf("%s %s",&str1, &str2) != EOF)
{
pos1 = 0,pos2 = 0;
aCount = bCount = 0;
while (str1[pos1] != '\0' && str2 != '\0')
{
if (str1[pos1++] == str2[pos2++])
{
aCount++;
posFlag[pos1-1] = 1;
}
}
if (pos1 < pos2)
{
min = pos1;
}
else
{
min = pos2;
}
for (pos1=0; pos1<min; pos1++)
{
if (posFlag[pos1] == 0)
{
for (pos2=0; str2[pos2]!='\0'; pos2++)
{
if (posFlag[pos2] == 0 &&
str2[pos2] == str1[pos1] &&
bPosFlag[pos2] == 0)
{
bCount++;
bPosFlag[pos2] = 1;
break;
}
}
}
}
printf("%dA%dB\n",aCount,bCount);
memset(str1,0,MAX_CHAR_LEN);
memset(str2,0,MAX_CHAR_LEN);
memset(posFlag,0,sizeof(int)*MAX_CHAR_LEN);
memset(bPosFlag,0,sizeof(int)*MAX_CHAR_LEN);
}
return 0;
}
14 楼
zhangc511 [专家分:310] 发布于 2007-07-29 20:08:00
[em3]
#include "stdio.h"
#define MAX 10000
int accord(char [],char []);
int equal(char [],char []);
void main()
{
int a,b;
char str1[MAX],str2[MAX];
while(scanf("%s %s",&str1, &str2) !=EOF)
{
a=accord(str1,str2);//位置相同的个数
b=equal(str1,str2);//位置不同的个数
printf("%dA%dB\n",a,b);
}
}
int accord(char str1[],char str2[])
{
int n=0;
while(*str1!='\0'&&*str2!='\0')
{
if (*str1==*str2){n++;*str2=-1;*str1=-2;}
str1++;
str2++;
}
return n;
}
int equal(char str1[],char str2[])
{
char *p;
int length1=0,length2=0,length=0,n=0;
int i,j,k;
for (p=str1;*p!='\0';p++)
length1++;//str1长度
for (p=str2;*p!='\0';p++)
length2++;//str1长度
length=length1>length2?length2:length1;
for(i=0;i<length-1;i++)
for(j=length-1-i,k=0;j<length&&k<length;j++,k++)
if(str1[j]==str2[k]){n++;str2[k]=-1;str1[j]=-2;}
for(i=0;i<length-1;i++)
for(j=0,k=i+1;j<length&&k<length;j++,k++)
if(str1[j]==str2[k]){n++;str2[k]=-1;str1[j]=-2;}
return n;
}
15 楼
廖增祥 [专家分:3930] 发布于 2007-07-29 22:51:00
[code=c]
/*
编译环境: Visual C++ 6.0
Language: C/C++
*/
#include <stdio.h>
#include <string.h>
#define MAX_CHAR_LEN 10001
void MemSet(char *p, int len)
{
long i;
for(i = 0; i < len; i ++)
{
if(p[i])
p[i] = 0;
}
}
void Calculate(char *p1, long n1, char *p2, long n2)
{
static char flag[10001] = {0};
MemSet(flag, 10001);
long A, B;
A = B = 0;
long i, j;
for(i = 0; i < n1; i ++)
{
for(j = 0; j < n2; j ++)
{
if(i < n2 && p1[i] == p2[i] && flag[i])
break;
if(i == j && !flag[i] && p1[i] == p2[i])
{
A ++;
flag[i] = 1;
break;
}
else if(j < i && i < n2 && !flag[i] && p1[i] == p2[i])
{
A ++;
flag[i] = 1;
break;
}
else if(j > i && j < n1 && !flag[j] && p1[j] == p2[j])
{
A ++;
flag[j] = 1;
continue;
}
else if(i != j && !flag[j] && p1[i] == p2[j])
{
B ++;
flag[j] = 1;
break;
}
}
}
printf("%ldA%ldB\n", A, B);
}
int main()
{
char str1[MAX_CHAR_LEN], str2[MAX_CHAR_LEN];
while(scanf("%s%s",str1, str2) != EOF)
{
Calculate(str1, strlen(str1), str2, strlen(str2));
}
return 0;
}
[/code]
16 楼
天亮再见 [专家分:170] 发布于 2007-07-30 01:24:00
#include <stdio.h>
#define MAX_CHAR_LEN 10001
int main()
{
char str1[MAX_CHAR_LEN],str2[MAX_CHAR_LEN];
while(1)
{
int Count,Pos,Pos1,Pos2;
scanf("%s %s",&str1, &str2);
if(*str1==0 || *str2==0) break;
for(Count = 0,Pos=0; str1[Pos] && str2[Pos];Pos++)
if( str1[Pos]==str2[Pos] )
{
Count ++;
str1[Pos] = -1;
str2[Pos] = -2;
}
printf("\n%dA",Count);
for(Count=0,Pos1 = 0; str1[Pos1]; Pos1++) {
for(Pos2 = 0; str2[Pos2]; Pos2++) {
if(str1[Pos1] == str2[Pos2])
{
for(Count++;str2[Pos2];Pos2++)
if(str1[Pos1] == str2[Pos2])
str2[Pos2]=-3;
break;
}
}//for(Pos2 = 0; str2[Pos2]; Pos2++)
}//for(Pos1 = 0; str1[Pos1]; Pos1++)
printf("%dB\n",Count);
}
return 0;
}
17 楼
tianxing [专家分:0] 发布于 2007-07-30 06:47:00
[em1]??!!!!!!!!!
18 楼
Alec62 [专家分:0] 发布于 2007-07-30 10:28:00
#include <iostream.h>
#include <string.h>
#include <stdio.h>
const int MAX_CHAR_LEN = 10001;
int main()
{
char str1[MAX_CHAR_LEN],str2[MAX_CHAR_LEN];
char *pdest;
int nindex;
while(cin>>str1>>str2)
{
//这里写你的计算代码
int nA=0;
int nB=0;
int maxitem;
int maxlen;
maxitem=strlen(str1)>strlen(str2)?1:2;
if (maxitem==1 )
maxlen=strlen(str1)-1;
else
maxlen=strlen(str2)-1;
for (int i=0 ;i<=maxlen;i++){
switch(maxitem){
case 1:if (i<=strlen(str2)-1 && str1[i]==str2[i]){
nA++;
continue;
}
break;
case 2:if (i<=strlen(str1)-1 && str1[i]==str2[i]){
nA++;
continue;
}
break;
}
pdest=strchr(str2,str1[i]);
if ((pdest==NULL) ||(*pdest==NULL)) continue;
nindex=pdest-str2;
if (nindex==i)
nA++;
else
if (nindex>-1) nB++;
}
char buf[2*MAX_CHAR_LEN+30];
sprintf(buf,"%s and %s ,result %dA %dB",str1,str2,nA,nB);
cout<<buf<<endl;
}
return 0;
}
19 楼
Twent [专家分:30] 发布于 2007-07-30 18:18:00
#include <stdio.h>
#include <cstring>
using namespace std;
const int MAX_CHAR_LEN = 10001;
long l1,l2;
int exist[256];
long a,b;
int main()
{
char str1[MAX_CHAR_LEN],str2[MAX_CHAR_LEN];
long i=0;
while(scanf("%c",&str1[i+1])){
a=0;
b=0;
memset(exist,0,sizeof(exist));
while (str1[i+1]!=' '){
exist[str1[i+1]]++;
i++;
// printf("%c",str1[i]);
scanf("%c",&str1[i+1]);
}
// printf("\n");
l1=i;
i=0;
scanf("%c",&str2[i+1]);
while (str2[i+1]!='\n'){
if(i+1<=l1){
i++;
if (str2[i]==str1[i]){
a++;
exist[str2[i]]--;
str2[i]=1;
}
}
scanf("%c",&str2[i+1]);
}
for (long j=1;j<=i;j++){
if (str2[j]==1)continue;
if (exist[str2[j]])b++;
}
i=0;
printf("%dA%dB\n",a,b);
return 0;
}
20 楼
isjk [专家分:210] 发布于 2007-07-30 19:25:00
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str1,str2;
int a,b;
a = 0;
b = 0;
while(cin>>str1>>str2)
{
for(int i = 1;i<str2.size();i++)
{
if(str1.find(str2.at(i)) == str2.at(i))
{
a++;
}
else
{
b++;
}
}
cout<<a<<"A"<<b<<"B"<<endl;
}
return 0;
}
我来回复