void paixu(int a[],int n)
{
int i,j,t;
for(j=0;j<n;j++ )
for(i=0;i<n-j;i++)
if(a[i]>a[i+1])
t=a[i],a[i]=a[i+1],a[i+1]=t;
}
int mian()
{
int i,n;
scanf("%d",&n);
int a[n],b[n];
for(i=0;i>n;i++)
scanf("%d",&a[i]);
for(i=0;i>n;i++)
scanf("%d",&b[i]);
paixu(a,n);
paixu(b,n);
for(i=0;i<=n;i++)
{
if(a[i]==b[i])
continue;
else
{
printf("0");
break;
}
if(i=n)
printf("1");
}
return 0;
}
你题目的解答代码如下:
#include<stdio.h>
void paixu(int a[], int n)
{
int i, j, t;
for (j = 0; j < n-1; j++)//改成 n-1
for (i = 0; i < n - j -1; i++) //改成 n - j -1; 否则 a[i + 1]会下标越界
if (a[i] > a[i + 1])
t = a[i], a[i] = a[i + 1], a[i + 1] = t;
}
int main() //是main 不是mian
{
int i, n;
scanf("%d", &n);
int a[n], b[n];
for (i = 0; i < n; i++) //改成 i < n 不是 >
scanf("%d", &a[i]);
for (i = 0; i < n; i++) //改成 i < n 不是 >
scanf("%d", &b[i]);
paixu(a, n);
paixu(b, n);
for (i = 0; i < n; i++) //改成 i < n 不是 <=
{
if (a[i] == b[i])
continue;
else
{
printf("0");
break;
}
}
if (i == n) //这个if要放到for外, 判断是否相等是两个等号 == 一个=是赋值
printf("1");
return 0;
}
如有帮助,望采纳!谢谢!
你的代码中有不少错误:
(1)paixu函数的内层for循环错误,for(i=0;i<n-j;i++) 改成 for(i=0;i<n-j-1;i++)
(2)main函数你拼写错了,不是mian 是main
(3)main函数中for循环中,
if(i=n) printf("1"); 这里永远不会执行,因为当if(a[i]==b[i])成立的时候,执行continue,继续下一次循环了。而当if(a[i]==b[i])不成立的时候,执行else{ printf("0"); break;},这里直接break退出for循环了,所以你的逻辑需要好好想想到底对不对。
(4)if(i=n) printf("1"); 这里,应该是 if(i==n)
(5)for(i=0;i<=n;i++) 这里应该是for(i=0;i<n;i++)
代码修改如下,第(3)处的逻辑错误,你需要贴出题目要求来才能帮你改
#include <stdio.h>
void paixu(int a[],int n)
{
int i,j,t;
for(j=0;j<n-1;j++ ) //这里改成j<n-1
for(i=0;i<n-j-1;i++) //这里改成 i<n-j-1
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
int main()//拼写错误mian
{
int i,n;
scanf("%d",&n);
int a[100],b[100]; //使用变量定义数组长度,在某些平台下编译不过,所以这里最好不要这么用,如果题目中说明了n的范围,直接用最大值,这里用100
for(i=0;i>n;i++)
scanf("%d",&a[i]);
for(i=0;i>n;i++)
scanf("%d",&b[i]);
paixu(a,n);
paixu(b,n);
for(i=0;i<n;i++) //这里是i<n
{
if(a[i]==b[i])
continue;
else
{
printf("0");
break;
}
//这里的if永远不会执行,你的逻辑有问题,你好好想想吧,我不知道你的题目要求,也没法帮你改
if(i==n) //这里是==
printf("1");
}
return 0;
}