----------------解决方案--------------------------------------------------------
我改了一下,应该好点
#include<stdio.h>
#include<math.h>
void main()
{
long int n,m,l=0,i;
scanf("%ld %ld",&n,&m);
for(i=1;i<=(int)sqrt(n);i++)
{
if(n%i==0)
l=(l+i%m+(n/i)%m)%m;//n/i代表的是另一个因子
}
l=l%m;
printf("%d\n",l);
}
谢谢PcrazyC
----------------解决方案--------------------------------------------------------
上面写的有问题,当n是m的平方的时候多加了一个,还是7楼写的好
----------------解决方案--------------------------------------------------------
第一题:我刚才修改后的程序,这次应该没问题了。
#include <stdio.h>
#define N 20
main()
{
char bracket[N];
int sequence[N]={'\0'};
int i,j,len,sum=0;
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: sum=1;break;
}
if(sum==1)
break;
}
if(sum)
printf("Input error!\n");
else
{
len=i-1;
if(i%2!=0)
printf("false\n");
else
{
for(i=1;sequence[i]!='\0';i++)
if(sequence[i-1]>sequence[i])
{
sum=1;
break;
}
if(sum==1)
printf("false\n");
else
{
for(i=0,j=len;i<j;i++,j--)
if(sequence[i]+sequence[j]!=9)
{
sum=1;
break;
}
if(sum==1)
printf("false\n");
else
printf("true\n");
}
}
}
}
----------------解决方案--------------------------------------------------------
上面写的有问题,当n是m的平方的时候多加了一个,还是7楼写的好
7楼的开僻了数组,这点并不好,而且他的SUM值肯定不小,像你那样其实再定义一个变量,判断一下就可以了,看23楼
----------------解决方案--------------------------------------------------------
我和23楼想法一样
----------------解决方案--------------------------------------------------------
我的第一个
#include <stdio.h>
main()
{
char *s;
int fh1,fh3,fh5,fh7; //对应{}[]()<>
int i,n;
while(EOF!=scanf("%s",s))
{
fh1=fh3=fh5=fh7=0;
n=strlen(s); //{} -> [] -> () -> <>。例如{[(<>)]}。
if(n%2==0)
{ //{[](<>)[<>(()<>)(<<><>>)]}<>()
for(i=1;i<=n;i++)
{
switch (*(s++))
{
case '{': ++fh1;
if(fh7>0 || fh5>0 || fh3>0) i=0;
break;
case '}': if(fh1>0)fh1-=1;
else i=0;
break;
case '[': ++fh3;
if(fh7>0 || fh5>0) i=0;
break;
case ']': if(fh3>0)fh3-=1;
else i=0;
break;
case '(': ++fh5;
if(fh7>0) i=0;
break;
case ')': if(fh5>0)fh5-=1;
else i=0;
break;
case '<': ++fh7; break;
case '>': if(fh7>0)fh7-=1;
else i=0;
break;
default : i=0;
}
if(i==0)
{
printf("flase\n");
break;
}
else if(i==n && fh1==0 && fh3==0 && fh5==0 && fh7==0) printf("true\n"); //刚才这里没考虑周到
else if(i==n) printf("flase\n"); //
}
}
else printf("flase\n");
}
}
天呀,又有漏洞了,等我改,好了。
[此贴子已经被作者于2007-3-19 14:23:05编辑过]
----------------解决方案--------------------------------------------------------
每次遇到数学里的什么什么数的时候都要到百度里查看是什么意思
----------------解决方案--------------------------------------------------------
第二个
#include <stdio.h>
#include <math.h>
main()
{
long n,s,a1,b1,sum,i;
printf("n=");
while(EOF!=scanf("%ld",&n))
{
printf("s=");
scanf("%ld",&s);
sum=0;
for(a1=1,b1=n;a1<b1;a1++)
{
if(n%a1==0)
{
b1=n/a1;
sum=sum+a1+b1;
printf("%ld %ld ",a1,b1);
}
}
printf("\n=%d\n",sum%s);
printf("n=");
}
}
[此贴子已经被作者于2007-3-19 15:15:51编辑过]
----------------解决方案--------------------------------------------------------
我的第一题:
[CODE]
#include <stdio.h>
#include <stdlib.h>
#define NUMBER 7
int panduan(char achar[], int n);
int duiying(char achar[], int n);
int main()
{
char achar[NUMBER], ch;
int i;
while(EOF != scanf("%c", &ch))/*判断结束*/
{
i = 0;
achar[0] = ch;
for(i = 1;;i ++)
{
scanf("%c", &achar[i]);
if(achar[i] == '\n')
break;
}
if(panduan(achar, i - 1) && duiying(achar, i - 1))
printf("true\n");
else
printf("false\n");
}
return 0;
}
int panduan(char achar[], int n)/*判断顺序是否正确*/
{
int i = (n + 1) / 2, j;
for(j = 0;j < i - 1;j ++)
if(((achar[j] - achar[j + 1] < 0) && (achar[j] == '(' && achar[j + 1] == '<')) || (achar[j] == '<' && achar[j + 1] == '('))
return 0;
return 1;
}
int duiying(char achar[], int n)/*判断是否对应*/
{
int i = (n + 1) / 2, j;
for(j = 0;j < i;j ++)
if(achar[n - j] - achar[j] == 1 || achar[n - j] - achar[j] == 2)
return 1;
return 0;
}
----------------解决方案--------------------------------------------------------