int fun(int a[],int n)/* 从main函数中接收传递的2个参数 */
{int i,j=1,k=a[0];/* 将数组的首地址赋给k */
for(i=1;i
{a[j++]=a[i];/* 如果不相等就把a[i] 赋给a[j++](有些难理解,但知道赋值给的是自增后的J) */
k=a[i];/* 把a[i]赋给K */
}
a[j]=0;/* 否则a[j]就赋值为0 */
return j;/* 返回J */
}
别人没解释清楚的给你再解释一下。
大神啊,二级题只要作出答案就好,算法的优化没必要吧?
/*
* 上面的都说的很仔细了
* 无非就是遇到一个新数就保存在a[j++]里面,
* 而且,k保存这个值用于和后面的比较。//这个k可以不需要
*/
int fun(int a[],int n)
{int i,j=1,k=a[0];//
for(i=1;i
{a[j++]=a[i];
k=a[i];
}
/*a[j]这个是处理结束标志??
* 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10
* 处理后:
* 2,3,4,5,6,7,8,9,10,0,6,7,7,8,9,9,10,10,10,10
* 感觉没实际意义,主程序也没用到。
*/
a[j]=0;
return j;
}
/*重写了程序,没运行,你自己测试下,应该没问题*/
int fun(int a[], int n)
{
int i,j=1;
for(i=1; i
a[j++] = a[i];
a[j] = 0;//感觉可以不要
return j;
}
//======================================
void fun( int *a, int *b)
{int i,j; /* i为循环控制变量,j为年龄段控制变量 */
for(i=0;i
for(i=0;i
if(j>10)b[M-1]++; /* 如果所得个人年龄除以10而大于10则该人的年龄大于100岁 b[10]累加1 */
else b[j]++;} /* 如果条件不成立则当前j所属年龄段的值累加1 */
}
//可以重写成这样,没必要但给另一种思路。
void fun( int *a, int *b)
{int i,j;
for(i=0;i
for(i=0;i
b[a[i]/10]++; /* 如果小于100,则对应年龄段的值加加 */
else b[M-1]++;}
}
//======================================
双层for循环,你先选定外循环的某个变量,分析内循环是要干什么,然后再选定一个内循环出来的结果,去看外循环是要干什么,有时候单看程序很困难理解,不放结合特殊举例法分析,画画流程图,一目了然。
希望能对你有所启示。
int fun(int a[],int n)//函数的两个传递的参数
{int i,j=1,k=a[0];//定义变量,将数组赋给k
for(i=1;i
{a[j++]=a[i];//如果不相等就把a[i] 赋给a[j],赋值后j++
k=a[i];//把a[i]赋给k,更新k的值为最新的需要给出的元素值
}
a[j]=0;//for循环结束后,a[j]赋值0
return j;//返回j,也就是最终数组的有效元素个数
}
第二题好像没什么更好的方法,做的操作都是必要的,去掉任何一个都不行
int fun(int a[],int n)//函数的两个传递的参数
{int i,j=1,k=a[0];//定义变量,将数组赋给k
for(i=1;i
{a[j++]=a[i];//如果不相等就把a[i] 赋给a[j]并J加加
k=a[i];//把a[i]赋给K
}
a[j]=0;//否则a[j]就赋值为0
return j;//返回J
}
其他的都差不多,能理解吧