大佬们,怎样实现把一个一维数组的全部赋给另一个一维数组的第i个
类似 array1=[2,2,2,2],array2=[2,3,3],array3[3.5],变成array4=[[2,2,2,2],[2,3,3],[3,5]]
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int i, len; char array[4][4] = { {2, 2, 2, 2}, {2, 3, 3, 0}, {3, 5, 0, 0}, {0} }; #define DEF_STACK_OF DEF_STACK_OF char sof[10] = {0xcc}; enum ar{ar1 = 0, ar2, ar3, ar4}; #define ar_sz(_ar) sizeof(array[_ar]) #define ar_le(_ar) strlen(array[_ar]) //memcpy ar1 memcpy(array[ar4], array[ar1], len = ar_sz(ar1)); //strcpy ar2 strcpy(array[ar4] + len, array[ar2]); len += ar_le(ar2); //strcpy ar3 /* write your code here */ for (i = 0; i < len; i++) { printf("array[ar4][%d] = %d, sof[%d] = %d\n", i, array[ar4][i], i, sof[i]); } return 0; }
[此贴子已经被作者于2021-10-5 14:00编辑过]
#include <stdio.h> int main(int argc, char *argv[]) { int array1[4]={2,2,2,2}, array2[4]={2,3,3}, array3[4]={3,5};//这3个数组不等长的话输出的时候需要做长度判断 int *array4[3]; array4[0]=array1; array4[1]=array2; array4[2]=array3; for(int i=0;i<3;i++) { for(int j=0;j<4;j++) printf("%d ", array4[i][j]); printf("\n"); } return 0; }
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int i, len; char array[4][4] = { {2, 2, 2, 2}, {2, 3, 3, 0}, {3, 5, 0, 0}, {0} }; #define DEF_STACK_OF DEF_STACK_OF char sof[10]; enum ar{ar1 = 0, ar2, ar3, ar4}; #define ar_sz(_ar) sizeof(array[_ar]) #define ar_le(_ar) strlen(array[_ar]) //memcpy ar1 memcpy(array[ar4], array[ar1], len = ar_sz(ar1)); //strcpy ar2 strcpy(array[ar4] + len, array[ar2]); len += ar_le(ar2); //strcpy ar3 strcpy(array[ar4] + len, array[ar3]); len += ar_le(ar3); //output by using stack overflow feature[debug-only] for (i = 0; i < len; i++) { printf("sof[%d] = %d\n", i, sof[i - 4]); } return 0; }
[此贴子已经被作者于2021-10-5 16:15编辑过]
#include <stdio.h> #include <stdlib.h> int** combinationSum( int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes ) { int** retval = malloc( 150*sizeof(int*) ); // 对于给定的输入,保证和为 target 的唯一组合数少于 150 个 *returnColumnSizes = malloc( 150*sizeof(int) ); *returnSize = 0; int buf[30*200+1]; // 1<=candidates.length<=30, 1<=candidates[i]<=200, 1<=target<=500 int bufSize = 0; int sum = 0; while( 1 ) { //for( int i=0; i!=bufSize; ++i ) // printf( "%d%c", candidates[buf[i]], " \n"[i+1==bufSize] ); if( sum == target ) { (*returnColumnSizes)[*returnSize] = bufSize; retval[*returnSize] = malloc( bufSize*sizeof(int) ); for( int i=0; i!=bufSize; ++i ) retval[*returnSize][i] = candidates[buf[i]]; ++*returnSize; } if( sum < target ) { int last = bufSize==0 ? 0 : buf[bufSize-1]; buf[bufSize++] = last; sum += candidates[last]; } else { for( ; bufSize!=0 && buf[bufSize-1]==candidatesSize-1; --bufSize ) sum -= candidates[candidatesSize-1]; if( bufSize == 0 ) break; sum += -candidates[buf[bufSize-1]] + candidates[buf[bufSize-1]+1]; ++buf[bufSize-1]; } } return retval; } int main( void ) { int candidates[] = { 2,3,6,7 }; int candidatesSize = sizeof(candidates)/sizeof(*candidates); int target = 7; int returnSize; int* returnColumnSizes; int** retval = combinationSum( candidates, candidatesSize, target, &returnSize, &returnColumnSizes ); for( int i=0; i!=returnSize; ++i ) { for( int j=0; j!=returnColumnSizes[i]; ++j ) printf( "%d%c", retval[i][j], ",\n"[j+1==returnColumnSizes[i]] ); } }