数组的关系比较
一个二维数组,怎么让它的第一行与第二行之间比较,然后相等的实参放一边,不相等的放在另一边,然后两边相乘,求源代码{:5_108:} “然后相等的实参放一边,不相等的放在另一边”是什么意思?
“然后两边相乘”
又是什么意思?
人造人 发表于 2018-6-7 22:00
“然后相等的实参放一边,不相等的放在另一边”
是什么意思?
就是求一个最小公倍数,需要将二维数组里面第一和第二行的值做比较,我直接举一个例子吧,={2,2,2,3,2,2,3,5};然后将第一行和第二行进行比较,相等的存放到一个变量里面,不相等的放到另外一个变量里面,然后两个变量相乘,得到的结果就是最小公倍数 c语言的卢克c 发表于 2018-6-7 23:14
就是求一个最小公倍数,需要将二维数组里面第一和第二行的值做比较,我直接举一个例子吧,={2,2,2, ...
看不懂你在说什么
就这个例子 ={2,2,2,3,2,2,3,5};
你先来算一遍
“第一行和第二行进行比较”
说的太笼统了,如何比较
“相等的存放到一个变量里面,不相等的放到另外一个变量里面”
“相等的” ?
说明不止一个?那么这个变量是什么类型的?应该不是简单的 int 或是 char 吧?
是一个数组?或是结构体?
没看懂什么意思啊?2放左边,3放左边,5放右边? 人造人 发表于 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;
}
}
这是我之前几个步骤的源代码,下一步是要利用数组,之后我的思路就一些乱 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;
}
人造人 发表于 2018-6-8 13:53
你这个程序已经可以把我的思路表达出来了,但是你可以试试看加一个输出语句,把你这个程序的步骤打印出来,数学上正确的答案是,12*10=120 三千芳华 发表于 2018-6-8 08:17
没看懂什么意思啊?2放左边,3放左边,5放右边?
2,2,3 2,5
然后两边相乘得到的结果就是最小公倍数了,感觉自己对数组有些迷,应该题目接触的比较少的原因吧,目前还没有找到程序解决方案{:5_105:} 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++我现在{:5_107:}还不会呀,麻烦你写这么多了,晚点我问问我表哥看看 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
多了一个标志,一个不存在标志
为什么你for循环里面要声明一个int呢,我觉得没必要的 c语言的卢克c 发表于 2018-6-8 19:45
为什么你for循环里面要声明一个int呢,我觉得没必要的
什么? 人造人 发表于 2018-6-8 19:47
什么?
(int i=1;i<4;++i),可以直接这样的(i=1;i<4;++i),节省空间 c语言的卢克c 发表于 2018-6-8 19:54
(int i=1;i
这个你现在先忽略吧,学到后面你就明白了
^_^
人造人 发表于 2018-6-8 20:02
这个你现在先忽略吧,学到后面你就明白了
^_^
{:5_109:}谢谢啦,能加个好友吗,不过我好像因为等级不够,没有加好友的权限
页:
[1]