大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
void fun(int *w, int p, int n)
创新互联建站主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务淮上,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
{ //只需要完成此部分功能即可
int b[N],i,j;
for(i = 0; i = p;i++)
{
b[i] = w[i];
}
for(i = 0; p+1+i n;i++)
{
w[i] = w[p+1+i];
}
for(j = 0;j = p;j++)
{
w[i++] = b[j];
}
}
//用一个循环就可以实现数组的循环左移:
int i,n,m;//temp表示左移位数
int a[n];
for(i=0;in-m;i++)a[i]=a[i+m];//此时的数组个数为n-m
思路:
所有数组都移位,那么其中一个元素的值的溢出位将和相邻的元素进行合并,
因此只要记住上一元素的溢出位,在下一元素移动后合并即可。
#define ELEMCNT 3 //定义数组元素个数
char a[ELEMCNT]; //被操作的元素
char exceedA=0,exceedB=0;//记忆溢出位用的变量,其中exceedA为上一元素溢出值,exceedB为本元素溢出值
//定义整体移动函数,其中k为左移位数
void LeftElem(int k){
int i;
char Msk=0;//用于计算溢出位的掩码,如k=6时,其掩码值为00000011(二进制)
for (i=0;i8-k;i++){
Msk=Msk|(1i);
}
//移动所有数组元素,i值对应数组元素下标i-1
for (i=ELEMCNT;i0;i--){
exceedB=(a[i-1](~Msk))(8-k);//计算溢出数据
a[i-1]=a[i-1]k+exceedA;
exceedA=exceedB;
}
}