删除数组0元素
从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数)
5
3 4 0 0 2
样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数)
3
3 4 2
样例输入:
7
0 0 7 0 0 9 0
样例输出:
2
7 9
样例输入:
3
0 0 0
样例输出:
0
<#include<stdio.h>
int a={0};
int m;
int compactintegers(int c)
{
int i,j;
for(i=0;i<c;i++)
{
if(a==0)
{
a=a;m--;
}
}
return m;
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a);
}
m=n;
m=compactintegers(n);
printf("%d\n",m);
for(i=0;i<m;i++)
{
printf("%d ",a);
}
return 0;
}>
样例输出是3
3 4 0
请问哪里有问题 if(a==0)
{
a=a;m--;
}
问题出在这里,这里只考虑了一种情况就是0,7这样的把7前移到0的位置但是第一个例子的0 0 2部分就会变成0 2
提供一种思路
#include<stdio.h>
int a = { 0 };
int m;
int compactintegers(int c)
{
int i, j = 0;
for (i = 0; i<c; i++)
{
if (a == 0)
{
m--;
}
else
{
a = a;
j++;
}
}
return m;
}
int main()
{
int n, i;
scanf("%d", &n);
for (i = 0; i<n; i++)
{
scanf("%d", &a);
}
m = n;
m = compactintegers(n);
printf("%d\n", m);
for (i = 0; i<m; i++)
{
printf("%d ", a);
}
return 0;
} 注意,CompactIntegers函数需要接受数组及其元素个数作为参数
不按照题目要求写代码,就算是输出结果正确,估计也不会得分吧
问题出在你返回的m只是表示了有多少个为0的值,并不能说明非零值的位置,所以直接打印前m条是不对的
参考代码
#include<stdio.h>
int a={0};
int b={0};
int m;
int j=0;
int compactintegers(int c)
{
int i;
for(i=0;i<c;i++)
{
if(a==0)
{
a=a;m--;
}
else{
b = i;
j++;
}
}
return m;
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a);
}
m=n;
m=compactintegers(n);
printf("%d\n",m);
for(i=0;i<j;i++)
{
int k=0;
k = b;
printf("%d ",a);
}
return 0;
} 按照题目要求写代码
#include <stdio.h>
size_t CompactIntegers(int array[], size_t size) {
for(size_t i = 0; i < size; ++i) {
if(!array) {
for(size_t j = i + 1; j < size; ++j) {
array = array;
}
--size; --i;
}
}
return size;
}
int main(void) {
int array;
size_t count; scanf("%lu", &count);
for(size_t i = 0; i < count; ++i) scanf("%d", &array);
count = CompactIntegers(array, count);
printf("%lu\n", count);
for(size_t i = 0; i < count; ++i) printf("%d ", array);
printf("\n");
return 0;
}
感觉2楼最简便以及贴合我最开始的想法,容易理解,谢谢大家的解惑
页:
[1]