1、http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1257&pid=1
Problem B: Restoring Password
#include<stdio.h>#include<string.h>
int main()
{
char a[100];
scanf("%s",a);
char b[10][12];
char c[11];
int i,j,k,l;
int begin,end;
for(i=0;i<10;i++)
{
scanf("%s",b[i]);
}
begin=0;
end=10;
for(j=0;j<8;j++)
{
int t=0;
for(k=begin;k<end;k++)
{
c[t++]=a[k];
}
c[t]='\0';
begin=end;
end=end+10;
for(l=0;l<10;l++)
{
if(strcmp(c,b[l])==0)
{
printf("%d",l);
break;
}
}
}
printf("\n");
return 0;
}
strcmp用来判断是否相等
Runtime Error:Segmentation fault
辅助解释:
Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域
2、http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1257&pid=0
Problem A: Help Victoria the Wise
#include<iostream.h>
#include<string.h>
//using namespace std;
int main()
{
char col[10];
int num[30];
int mm[10];
int k;
int counts;
while(cin>>col)
{
k=0;
counts=0;
memset(num,0,sizeof(num));//清零作用
for(int i=0;i<6;i++)
{
num[col[i]-'A']++;
}
for(int j=0;j<26;j++)
{
if(num[j]>0)
{
counts++;
mm[k++]=num[j];
}
}
switch(counts)
{
case 1:cout<<1<<endl;
break;
case 2:
{
if(mm[0]==1||mm[1]==1)
{
cout<<1<<endl;
break;
}
else
{
cout<<2<<endl;
break;
}
}
case 3:
{
if(mm[0]==3||mm[1]==3||mm[2]==3)
{
cout<<3<<endl;
break;
}
else
if(mm[0]==2&&mm[1]==2&&mm[2]==2)
{
cout<<6<<endl;
break;
}
else
{
cout<<2<<endl;
break;
}
}
case 4:
{
if(mm[0]==3||mm[1]==3||mm[2]==3||mm[3]==3)
{
cout<<5<<endl;
break;
}
else
{
cout<<8<<endl;
break;
}
}
case 5:
{
cout<<15<<endl;
break;
}
case 6:
{
cout<<30<<endl;
break;
}
}
}
return 0;
}
排列组合不太懂 为什么要算num[col[i]-'A']++
void *memset(void *s,int ch,size_t n);
#include<string.h>
将 s 中前 n 个字节用 ch 替换并返回 s 。说明memset是按字节赋值的。