c语言的卢克c 发表于 2018-6-7 21:45:35

数组的关系比较

一个二维数组,怎么让它的第一行与第二行之间比较,然后相等的实参放一边,不相等的放在另一边,然后两边相乘,求源代码{:5_108:}

人造人 发表于 2018-6-7 22:00:23

“然后相等的实参放一边,不相等的放在另一边”
是什么意思?

人造人 发表于 2018-6-7 22:01:02

“然后两边相乘”
又是什么意思?

c语言的卢克c 发表于 2018-6-7 23:14:40

人造人 发表于 2018-6-7 22:00
“然后相等的实参放一边,不相等的放在另一边”
是什么意思?

就是求一个最小公倍数,需要将二维数组里面第一和第二行的值做比较,我直接举一个例子吧,={2,2,2,3,2,2,3,5};然后将第一行和第二行进行比较,相等的存放到一个变量里面,不相等的放到另外一个变量里面,然后两个变量相乘,得到的结果就是最小公倍数

人造人 发表于 2018-6-8 00:19:13

c语言的卢克c 发表于 2018-6-7 23:14
就是求一个最小公倍数,需要将二维数组里面第一和第二行的值做比较,我直接举一个例子吧,={2,2,2, ...

看不懂你在说什么
就这个例子 ={2,2,2,3,2,2,3,5};
你先来算一遍


“第一行和第二行进行比较”
说的太笼统了,如何比较


“相等的存放到一个变量里面,不相等的放到另外一个变量里面”
“相等的” ?
说明不止一个?那么这个变量是什么类型的?应该不是简单的 int 或是 char 吧?
是一个数组?或是结构体?

三千芳华 发表于 2018-6-8 08:17:43

没看懂什么意思啊?2放左边,3放左边,5放右边?

c语言的卢克c 发表于 2018-6-8 12:46:20

人造人 发表于 2018-6-8 00:19
看不懂你在说什么
就这个例子 ={2,2,2,3,2,2,3,5};
你先来算一遍


是int型的,一个数组比较的步骤我不会
#include <stdio.h>
int main()
{
    int dedivisor,divisor,a,b;
    printf("Please enter two integers:");
    scanf("%d,%d",&a,&b);
    printf("The result is:\n");
    dedivisor=a;
    while(1)
    {
      for(divisor=2; divisor<=dedivisor; divisor++)
      {

            if(dedivisor%divisor==0)
            {
                dedivisor=dedivisor/divisor;
                break;
            }
      }
      printf("%d ",divisor);
      if(dedivisor==1)
      {
            printf("\n");
            break;
      }
    }
    dedivisor=b;
   while(1)
    {
      for(divisor=2; divisor<=dedivisor; divisor++)
      {

            if(dedivisor%divisor==0)
            {
                dedivisor=dedivisor/divisor;
                break;
            }
      }
      printf("%d ",divisor);
      if(dedivisor==1)
      {
            break;
      }
    }
这是我之前几个步骤的源代码,下一步是要利用数组,之后我的思路就一些乱

人造人 发表于 2018-6-8 13:53:45

c语言的卢克c 发表于 2018-6-8 12:46
是int型的,一个数组比较的步骤我不会
#include
int main()


#include <stdio.h>

int main(void)
{
        int arr = {{2, 2, 2, 3}, {2, 2, 3, 5}};
        int a;
        int b;

        for(int i = 0; i < 4; ++i)
        {
                if(arr == arr)        // 做比较?如何比较? == 比较?
                {
                        // 相等的存放到一个变量里面?
                        // 如何放?这个变量是int类型?
                        a = arr;
                }
                else
                {
                        b = arr;
                }
        }

        // 然后两个变量相乘?
        int result = a * b;

        return 0;
}

c语言的卢克c 发表于 2018-6-8 16:20:32

人造人 发表于 2018-6-8 13:53


你这个程序已经可以把我的思路表达出来了,但是你可以试试看加一个输出语句,把你这个程序的步骤打印出来,数学上正确的答案是,12*10=120

c语言的卢克c 发表于 2018-6-8 16:36:29

三千芳华 发表于 2018-6-8 08:17
没看懂什么意思啊?2放左边,3放左边,5放右边?

2,2,3            2,5
然后两边相乘得到的结果就是最小公倍数了,感觉自己对数组有些迷,应该题目接触的比较少的原因吧,目前还没有找到程序解决方案{:5_105:}      

人造人 发表于 2018-6-8 17:43:55

c语言的卢克c 发表于 2018-6-8 16:20
你这个程序已经可以把我的思路表达出来了,但是你可以试试看加一个输出语句,把你这个程序的步骤打印出来 ...

这个程序用C语言写比较麻烦
我用C++写了一个
不知行不行
#include <iostream>
#include <vector>

int main()
{
        std::vector<std::vector<int>> data = {{2, 2, 2, 3}, {2, 2, 3, 5}};
        std::vector<int> left;
        std::vector<int> right;

        for(auto i = data.at(0).begin(); i != data.at(0).end(); ++i)
        {
                for(auto j = data.at(1).begin(); j != data.at(1).end(); ++j)
                {
                        if(*i == *j)
                        {
                                left.push_back(*i);
                                data.at(0).erase(i);
                                data.at(1).erase(j);
                                i = data.at(0).begin();                // reset
                                j = data.at(1).begin();                // reset
                        }
                }
        }

        for(auto i = data.at(0).begin(); i != data.at(0).end(); ++i)
        {
                right.push_back(*i);
        }
        for(auto i = data.at(1).begin(); i != data.at(1).end(); ++i)
        {
                right.push_back(*i);
        }

        int result = 1;
        for(auto i = left.begin(); i != left.end(); ++i)
        {
                result *= *i;
        }
        for(auto i = right.begin(); i != right.end(); ++i)
        {
                result *= *i;
        }
        std::cout << result << std::endl;

        return 0;
}

c语言的卢克c 发表于 2018-6-8 17:48:05

c++我现在{:5_107:}还不会呀,麻烦你写这么多了,晚点我问问我表哥看看

人造人 发表于 2018-6-8 17:57:09

c语言的卢克c 发表于 2018-6-8 17:48
c++我现在还不会呀,麻烦你写这么多了,晚点我问问我表哥看看

C语言好像也不麻烦
这个应该可以了
#include <stdio.h>

int main(void)
{
        int data = {{2, 2, 2, 3}, {2, 2, 3, 5}};
        int flag = {0};
        int left;
        int left_count = 0;
        int right;
        int right_count = 0;

        for(int i = 0; i < 4; ++i)
        {
                for(int j = 0; j < 4; ++j)
                {
                        if(flag || flag)
                                continue;

                        if(data == data)
                        {
                                left = data;
                                flag = 1;
                                flag = 1;

                                i = 0;                // reset
                                j = 0;                // reset
                        }
                }
        }

        for(int i = 0; i < 4; ++i)
        {
                if(!flag)
                        right = data;
        }
        for(int i = 0; i < 4; ++i)
        {
                if(!flag)
                        right = data;
        }

        int result = 1;
        for(int i = 0; i < left_count; ++i)
        {
                result *= left;
        }
        for(int i = 0; i < right_count; ++i)
        {
                result *= right;
        }
        printf("%d\n", result);

        return 0;
}

人造人 发表于 2018-6-8 17:57:48

多了一个标志,一个不存在标志

c语言的卢克c 发表于 2018-6-8 19:37:03

哪呢,我怎么没发现呢,正在思考你写的这个程序

c语言的卢克c 发表于 2018-6-8 19:45:26

人造人 发表于 2018-6-8 17:57
多了一个标志,一个不存在标志

为什么你for循环里面要声明一个int呢,我觉得没必要的

人造人 发表于 2018-6-8 19:47:04

c语言的卢克c 发表于 2018-6-8 19:45
为什么你for循环里面要声明一个int呢,我觉得没必要的

什么?

c语言的卢克c 发表于 2018-6-8 19:54:34

人造人 发表于 2018-6-8 19:47
什么?

(int i=1;i<4;++i),可以直接这样的(i=1;i<4;++i),节省空间

人造人 发表于 2018-6-8 20:02:34

c语言的卢克c 发表于 2018-6-8 19:54
(int i=1;i

这个你现在先忽略吧,学到后面你就明白了
^_^

c语言的卢克c 发表于 2018-6-8 20:26:04

人造人 发表于 2018-6-8 20:02
这个你现在先忽略吧,学到后面你就明白了
^_^

{:5_109:}谢谢啦,能加个好友吗,不过我好像因为等级不够,没有加好友的权限
页: [1]
查看完整版本: 数组的关系比较