第一题 虽然不是最好,但是也算是做出来了
#define NUM 50
main()
{ int i=0,sum=0;
char str[NUM];
printf("Input:");
scanf("%s",str);
while(str[i]!='\0')
{sum++;
i++;}
if(sum%2!=0)printf("False\n");
else
for(i=0;i<sum;i++)
{ if(str[i]=='<')
if(str[i+1]!='>')
{printf("False");
break;
}
if(str[i]=='(')
if(str[i+1]=='['||'{'||']'||'}')
{printf("False");
break;
}
if(str[i]=='[')
if(str[i+1]=='{'||'}')
{ printf("False");
break;
}
if(str[i]=='{')
if(str[i+1]=='{')
{printf("False");
break;
}
printf("TURE");
break;
}
getch();
}
[此贴子已经被作者于2007-3-18 22:54:05编辑过]
----------------解决方案--------------------------------------------------------
我是这样想的
<>里面不能有其他的括号
()里面不能有{,[,],}
[]里面不能有{,}
{}里面不能有{,
排除了这些就剩下true
----------------解决方案--------------------------------------------------------
我的还有一个错误,就是如果输入
[()]结果也是错,不直到为什么
----------------解决方案--------------------------------------------------------
括号里可以套括号,重要括号里面是匹配的就行.
----------------解决方案--------------------------------------------------------
第二个要是不考虑数据超过长整形比较简单
#include<stdio.h>
void main()
{
long int n,m,l=0,i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
if(n%i==0)
l=(l+i%m)%m;//这个地方这样写在m不是很接近long int的最大范围的时候能防止l的溢出
}
l=l%m;
printf("%d\n",l);
}
----------------解决方案--------------------------------------------------------
问斑竹
第一个要如果表达式子是这样的合不合法
(()) //就是同一级别能不能铅套
要是不合法的话就简单多了
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int *a,i=0,sum=0;
char c[81];
gets(c);
while(c[++i]);
a=(int *)malloc(i*sizeof(int));
for(i=0;c[i];i++)
{
switch(c[i])
{
case '{':a[i]=4;break;
case '[':a[i]=3;break;
case '(':a[i]=2;break;
case '<':a[i]=1;break;
case '>':a[i]=-1;break;
case ')':a[i]=-2;break;
case ']':a[i]=-3;break;
case '}':a[i]=-4;break;
default:a[i]=0;sum=1;break;
}
if(sum==1)
break;
}
if(sum)
puts("false");
else
if(i&1)
puts("false");
else
{
for(i=0;c[i];i++)
sum+=a[i];
if(sum)
puts("false");
else
{
for(i=1;c[i]&&a[i-1]>=a[i];i++);
if(!c[i])
{
sum=i;
for(i=0;i<sum/2&&a[i]==-a[sum-1-i];i++);
if(i==sum/2)
puts("frue");
else
puts("false");
}
else
puts("false");
}
}
free(a);
}
----------------解决方案--------------------------------------------------------
第二个要是不考虑数据超过长整形比较简单
#include<stdio.h>
void main()
{
long int n,m,l=0,i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
if(n%i==0)
l=(l+i%m)%m;//这个地方这样写在m不是很接近long int的最大范围的时候能防止l的溢出
}
l=l%m;
printf("%d\n",l);
}
这位不觉得效率比较低吗?当输入的数比较大时,还会停一下才显示结果,比如:500000000,9.虽然结果都是3但是你却要等数秒后才有结果
还有输入输出长整型要用%ld
[此贴子已经被作者于2007-3-19 10:21:28编辑过]
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define N 9
main()
{
char bracket[N];
int sequence[N]={'\0'};
int i,j,len;
printf("Please input the bracket string:");
gets(bracket);
for(i=0;bracket[i]!='\0';i++)
{
switch(bracket[i])
{
case '{': sequence[i]=1;break;
case '}': sequence[i]=8;break;
case '[': sequence[i]=2;break;
case ']': sequence[i]=7;break;
case '(': sequence[i]=3;break;
case ')': sequence[i]=6;break;
case '<': sequence[i]=4;break;
case '>': sequence[i]=5;break;
default: printf("Input error!\n");break;goto end;
}
}
len=i-1;
if(i%2!=0)
{
printf("false\n");
goto end;
}
else
{
for(i=1;sequence[i]!='\0';i++)
if(sequence[i-1]>sequence[i])
{
printf("false\n");
break;
goto end;
}
for(i=0,j=len;i<j;i++,j--)
if(sequence[i]+sequence[j]!=9)
{
printf("false\n");
break;
goto end;
}
}
printf("true\n");
end: return 0;
}
我做的第一题 请高手看看里边的问题在哪里,有些输入能运算对,但有些就出问题了。
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------