我在C++中看到了同样的问题,但我仍然不知道如何将它应用于C,即使这两种语言非常相似.我认为错误是内部for循环中的错误.例如输入:v[100] = {1,2,3,3,4,1}我期望输出:w[100] = {1,2,3,4}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v[100], w[100], n, m, i, j, distinct=1;
printf("n= ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
printf("v[%d]= ", i);
scanf("%d", &v[i]);
}
for(i=0; i<n; i++)
{
for(j=i+1; (j<n)&&(distinct==1); j++)
if(v[i]==w[j])
distinct=0;
if(distinct==1)
{
w[m]=v[i];
m++;
}
}
printf("the distinct elements are: ");
for(i=0; i<m; i++)
printf("%d\n", w[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这个输出是:randoms数
你没有将m的初始值设置为等于零 - 它是未定义的....
您还需要为您测试的数组的每个元素将distinct重置为1.(实际上你不需要变量distinct,见下文)
你还需要改变j循环 - 它应该是
for(j=0; (j<m)&&(distinct==1); j++)
Run Code Online (Sandbox Code Playgroud)
因为j需要遍历数组w
有了这些修复它可以工作....(见下文)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v[100], w[100], n, m=0, i, j, distinct=1;
printf("n= ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
printf("v[%d]= ", i);
scanf("%d", &v[i]);
}
distinct=1;
for(i=0; i<n; i++)
{
for(j=0; (j<m)&&(distinct==1); j++)
if(v[i]==w[j])
distinct=0;
if(distinct==1)
{
w[m]=v[i];
m++;
}
}
printf("the distinct elements are: ");
for(i=0; i<m; i++)
printf("%d\n", w[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
没有区别 - 你能看出这是如何运作的吗?(此代码也有效)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v[100], w[100], n, m=0, i, j;
printf("n= ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
printf("v[%d]= ", i);
scanf("%d", &v[i]);
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
if(v[i]==w[j])
break;
if(j==m)
{
w[m]=v[i];
m++;
}
}
printf("the distinct elements are: ");
for(i=0; i<m; i++)
printf("%d\n", w[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4075 次 |
| 最近记录: |