我必须创建一个函数来检查数组中是否有0,以及是否将它们移动到数组的开头,例如 0 4 0 8 9 - &gt ; 0 0 4 8 9 ,我尝试过使用此功能
void movement(int a[],int n)
{
int temp,k=0,i;
for(i=n-1;i>=0;i--)
{
if(a[i]==0);
{
k++;
a[i]=a[i-1];
}
for(i=1;i<k;i++)
{
a[i]=0;
}
}
}
然而它不起作用,任何人都可以帮助我吗?
答案 0 :(得分:2)
就你所说的你实际上不需要排序而言,你只需要将0移动到数组的开头。
在这种情况下,只需通过数组一次,使用teseconindex变量存储非零的最低索引。教你在零存储的零指数处找到0替换项目的时间,并将其递增。
for(size_t ndx = 0, zeroNdx = 0; count> ndx; ++ndx)
{
if(!arr[ndx])
arr[ndx] = arr[ndxZero];
arr[ndxZero++] = 0;
} {
}
如果你真的需要排序,这还不够。
答案 1 :(得分:2)
在阵列之间移动元素是昂贵的,所以我使用临时阵列。这是一个示例:
#include <stdio.h>
int main()
{
int array[]={0,1,2,0,3,0,0};
int temp[100];
int i,count=0;
for(i=0;i<=6;i++){
if(array[i]==0){
temp[count]=array[i]; //copy all zero into temp first
count++;
}
}
for(i=0;i<=6;i++)
{
if(array[i]!=0 && count<=6)
{
temp[count]=array[i]; //fill other elements other than 0
count++;
}
}
printf("%d\n",temp[6]);
for(i=0;i<=6;i++){
printf("%d ",temp[i]);
}
}
o / p:0 0 0 0 1 2 3
答案 2 :(得分:1)
你可以这样做:
void movement(int a[],int n)
{
int temp,k=0,i;
for (i = 0; i < n; i++)
{
if (a[i] != 0)
{
if (a[k] == 0)
k++;
}
else
{
if (a[k] != 0)
{
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
k++;
}
}
}
这会在数组的开头移动数组中的所有0
。复杂性 - O(n),只有一个通过给定的数组,不需要额外的空间。
答案 3 :(得分:0)
这应该只需要稍微复杂一点:
public float speed = 10.0F;
public float RotSpeed = 150.0F;
public float minY = 0.0f;
public float maxY = 90.0f;
float forwardBackward;
float leftRight;
float RotLeftRight;
float RotUpDown;
Vector3 euler;
public void CameraRotate()
{
transform.localEulerAngles = euler;
// Getting axes
RotLeftRight = Input.GetAxis("Mouse X") * RotSpeed * Time.deltaTime;
RotUpDown = Input.GetAxis("Mouse Y") * -RotSpeed * Time.deltaTime;
// Doing movements
euler.y += RotLeftRight;
euler.x += RotUpDown;
LimitRotation ();
}
public void LimitRotation()
{
if(euler.x >= maxY)
euler.x = maxY;
if(euler.x <= minY)
euler.x = minY;
}