This topic has been archived. It cannot be replied.
-
工作学习 / IT技术讨论 / help: C语言算法的题目-数组变换.
-bobo123(bobo);
2004-1-13
{624}
(#1559579@0)
-
1) 求补向量, (if(A[i]==i) a[i]=-1) else(a[i]=i);
2) 循环右移一位;得向量B;
2) 顺次以B的有效值补A的无效值;
-eagle_no1(瞎起哄);
2004-1-13
(#1559737@0)
-
估计大家很难理解题目的意思.在这个项目是要在屏幕上显示数据库某张表的N 条记录,每一次显示的次序都不一样.当前显示的次序,是其上一次显示次序的向前移动移动一位的结果,也就是说原来的第一个变到最后一个,第二个变为第一个,以此类推.但是在记录里有个标志位,当这个标志位是TRUE 时,它在屏幕上显示的次序是不会被改变的
-bobo123(bobo);
2004-1-13
{270}
(#1559811@0)
-
看你的例子,怎么和你的说明不一致啊。不是向左循环移位,应该是向右循环移位吧。
-jqian(Q_Q);
2004-1-13
(#1559888@0)
-
例子是向左的.
-bobo123(bobo);
2004-1-13
(#1559920@0)
-
例1: N 为6 输入数组A的值为{-1,-1,-1,-1,-1,-1} ,那么进行旋转变换后的数组A的值为{5,0,1,2,3,4};向左么!看了半天,还是向右啊。
-jqian(Q_Q);
2004-1-13
{30}
(#1559929@0)
-
{5,0,1,2,3,4} :第一个元素为5 表示要排到最后一个,第二个元素为0,表示要排到第一个,.... 所以是向左.
-bobo123(bobo);
2004-1-15
(#1562276@0)
-
解决了.源程序void Rotate(int A[])
{
Int16 value;
Int16 i,j;
Boolean find;
if(A[0]==-1) A[0]=N-1;
for(value=0;value<N;value++)
{
find=false;
for(j=0;j<N;j++)
if(A[j]==value)
{
find=true;
break;
}
if(!find)
for(j=0;j<N:j++)
if(A[j]==-1)
{
A[j]=value;
break;
}
}
}
-bobo123(bobo);
2004-1-13
{478}
(#1559952@0)
-
效率太低了。 重写! :D
-oxknife(闲人——瞎忙!!!);
2004-1-15
(#1562334@0)
-
简化算法void Rotate(int A[])
{
Int16 value,end;
Int16 i;
for(i=N-1,i<=0;i--) {
if A[i]==-1 break;
}
if i<=0 return;
value=i;end=i+1;
for(i=0;i<end;i++) {
if A[i]== -1 {
A[i]=value;
value=i;
}
}
}
-freetalk(FreeTalk);
2004-1-15
{283}
(#1562555@0)
-
不错.
-bobo123(bobo);
2004-1-15
(#1562678@0)