注册 登录
编程论坛 C语言论坛

大佬们,怎样实现把一个一维数组的全部赋给另一个一维数组的第i个

炸天帮达令 发布于 2021-10-05 13:01, 1883 次点击
类似 array1=[2,2,2,2],array2=[2,3,3],array3[3.5],变成array4=[[2,2,2,2],[2,3,3],[3,5]]
9 回复
#2
自由而无用2021-10-05 13:41
//online parser: https://www.bccn.net/run/
程序代码:
#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编辑过]

#3
apull2021-10-05 15:16
你那个是python里的数组吧,这个效果可以用一维结构数组,二维int数组,一维int指针数组实现。

程序代码:


 #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;
}
#4
炸天帮达令2021-10-05 15:57
回复 3楼 apull
这个是力扣上的一道题,要求找一个和的组合,并输出这些组合
输入: candidates = [2,3,6,7], target = 7
输出: [[7],[2,2,3]]
我不知道这个结果要怎么去实现它这个格式
#5
炸天帮达令2021-10-05 15:59
回复 2楼 自由而无用
谢谢大佬,这个是力扣上的一道题,要求找一个和的组合,并输出这些组合
输入: candidates = [2,3,6,7], target = 7
输出: [[7],[2,2,3]]
我不知道这个结果要怎么去实现它这个格式
你的代码的结果不和它这个一样
#6
自由而无用2021-10-05 16:14
回复 5楼 炸天帮达令
oh, it sounds very sad, hope you find the best solution asap
I just play c-code at my will
//online parser: https://www.bccn.net/run/
程序代码:
#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;
}


output sample:

sof[0] = 2
sof[1] = 2
sof[2] = 2
sof[3] = 2
sof[4] = 2
sof[5] = 3
sof[6] = 3
sof[7] = 3
sof[8] = 5

[此贴子已经被作者于2021-10-5 16:15编辑过]

#7
rjsp2021-10-08 09:26
与其屁的有用信息都没有的废话,为什么不直接贴出题目?
难道把题目提出来是泄露国家机密?我来试试看

题目链接:https://
摘取相关信息
/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** combinationSum(int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes){

}
#8
炸天帮达令2021-10-10 21:20
回复 7楼 rjsp
哈哈我的问题,我想着是知道那个点后,尝试自己写出来,以后我应该把题目也粘过来的
#9
rjsp2021-10-11 10:41
回复 8楼 炸天帮达令
我试了一下,提交通过

程序代码:
#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]] );
    }
}
#10
炸天帮达令2021-12-16 14:26
回复 9楼 rjsp
感谢大神,没有想到你为我做了一遍,在那天后我就没怎么逛坛了,瞎忙于练车和期末准备去了,现在捡起来好好学习,今天遇到一个JAVA的问题实在没找到解决办法,来看看有没有大神帮忙看看。
再次感谢大神!
1