C语言如何把三个数组合成一个数组 如a[]={1,2,3}b[]={4,5,6}c[]={7,8,9} 结:d[]={1,2,3,4,5,6,7,8,9,}?
//O(n),完成合并
#include<stdio.h>
int merge(int a[],int b[],int n,int m){//合并两个有序数组
//原理是归并排序的合并阶段
//两个有序数组合并,仍保持有序
int i=0,j=0;
int c[100]={0};//存储合并后的数组
int k=0;
while(i<n&&j<m){
if(a[i]<b[j]){
c[k++]=a[i++];
}
else{
c[k++]=b[j++];
}
}
while(i<n){
c[k++]=a[i++];
}
while(j<m){
c[k++]=b[j++];
}
for(int i=0;i<k;i++){
a[i]=c[i];//合并后的数组存入a数组
}
return k;//返回合并后的数组长度
}
void print(int a[],int n){//打印数组
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("
");
}
int main(){
int a[20]={1,2,3};
int b[20]={4,5,6};
int c[20]={7,8,9};
int len1=3;//数组a的长度
int len2=3;//数组b的长度
int len3=3;//数组c的长度
int len=0;//合并数组长度
//经过两次合并
len=merge(a,b,len1,len2);//数组a,b合并,存入数组a
printf("a,b合并
");
print(a,len);//打印a,b合并结果
len=merge(a,c,len,len3);//数组a,b,c合并,存入数组a
printf("a,b,c合并
");
print(a,len);//打印a,b,c合并结果
return 0;
}
下面方法可以把三个int 数组合成一个新数组,新数组元素个数是 m。
已知的三个数组大小可以不等。
如果是 float 或 double 型,把程序中变量声明和 sizeof(int) 换成 相应类型即可。
#include <stdio.h>
int main()
{
int a[]={1,2,3},b[]={4,5,6},c[]={7,8,9},*d;
int n[3],m,i;
n[0]=sizeof(a)/sizeof(int);
n[1]=sizeof(b)/sizeof(int);
n[2]=sizeof(c)/sizeof(int);
m=n[0]+n[1]+n[2];
d = (int *) malloc(m * sizeof(int));
for (i=0;i<n[0];i++)d[i]=a[i];
for (i=0;i<n[1];i++)d[i+n[0]]=b[i];
for (i=0;i<n[2];i++)d[i+n[0]+n[1]]=c[i];
for (i=0;i<m;i++) printf("%d ",d[i]);
return 0;
}
设置一个字符串buffer,把三个数组分别循环一遍,放进buffer,用逗号隔开,然后再转化成一个数组!
循环,赋值,
都是一维数组可以用接字符串的方式延伸,不行的话就用循环,一步一步赋值!
你可以上网查查一些函数,有些函数可以拼接数组.我学的是java,最笨的方法就是写循环把每个数组值取出来然后对d数组进行赋值
杜戚怜4572 :答:定义一个大一点的数组,然后把所有的数组循环赋值给你定义的这个数组就行了啊,只不过是大的这个数组的下标一直往上加。include<stdio.h> int main(){ int x[200];int a[20],b[20],c[20];int i=0,j;for(j=...
杜戚怜4572 :答:这个问题不难!这个很简单嘛。不过建议不要用数组,数组的话,太大浪费,太小会越界。可以用vector容器。你首先自己写个判断水仙花数的函数先,这里我假设就是boolhanshu(int);再定义一个足够大的数组.例如inta[1000];intn...
杜戚怜4572 :答:unsigned char n1=0x03; //11 unsigned char n2=0; //00 n1=n1<<2;n2|=0x03;用移位操作就可以完成
杜戚怜4572 :答:2]了 避免混淆形参和实参,可以将 void fun(int*a)写成 void fun(int* p)这样的意思就是p所指向的地方,即a[2]的值等于a[3]的值,其余i = 1、0都是一样的,将数组前3个的值换成数组第四个值 ...
杜戚怜4572 :答:for ( i=0;i<2;i++ ) for ( j=i+1;j<3;j++ ) if ( a[i]
杜戚怜4572 :答:写个 C 控制台的,它能够完成 从任意个数中随机选择任意个组合,并且按一下键盘,将这个组合显示出来。为什么会这样,这和你的说法不一致,因为你说的部分内容不好界定,就是"我敲165下任意键,逐个显示。"这一句。可以...
杜戚怜4572 :答:include <iostream> using namespace std;int main(){ int a[]={1 ,2 ,3 ,4 ,5}, i, j, k,l;for(i=0;i<=4;i++){ for(j=0;j<=4;j++){ for(k=0;k<=4;k++){ for(l=0;l<=4;l++){ ...
杜戚怜4572 :答:include <stdio.h>void main(){ int i, array[3],a,b,c,t; for(i=0;i<3;i++) //这里3个数:0、1、2即可,不要等于3 scanf("%d",&array[i]); a=array[0]; b=array[1]; c...
杜戚怜4572 :答:1、实际上就是实现strcat这个字符串库函数,在vc自带的crt源码或者linux平台的glibc库中都有strcat的源码,自己可以查阅参考,看看库开发者是如何写代码的,对于学习C语言非常有用。2、示例 include <stdio.h> char *strcat(...
杜戚怜4572 :答:/// 判断3个三位数是否为不同数字组成 /// /// /// /// /// <returns></returns> static bool checkNum(int num1, int num2, int num3){ int[] list = new int[9];list[0] = num1 / 100;...