| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 373 人关注过本帖
标题:关于前天的一个问题,我有了个新的思路,但是有人跟我说我的方法行不通?
只看楼主 加入收藏
xnattack
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-9-9
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:2 
关于前天的一个问题,我有了个新的思路,但是有人跟我说我的方法行不通?
https://bbs.bccn.net/thread-457304-1-1.html
这是我上次发的帖子,题目是这个
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
        int M[8],i,j,k,n;
        scanf("%d",&n);
for(i=1;i<n;i++)
    for(j=0;j<n;j++)
    {
        M[j]=i;
    while(M[0]+M[1]+9==4\
            &&(M[2]-M[3])*M[4]==4\
            &&M[5]+M[6]-M[7]==4\
            &&(M[0]+M[2])/M[5]==4\
            &&(M[1]-M[3])*M[6]==4\
            &&9-M[4]-M[7]==4)
        for(k=0;k<8;k++)
            printf("%d",M[k]);
    }
    return EXIT_SUCCESS;
}


原帖子里有人给出了用好几个for暴力破解的方法,我觉得不够灵活,我的思路是用两个for循环,给M[8]里的元素从后往前从1到n依次赋值,当满足while条件的就输出,程序刚写好可能有些还要改的地方(如果有热心朋友帮忙改下更好),但是我拿去给一个朋友看的时候一口气就被否决了,说不是穷举什么的。

[ 本帖最后由 xnattack 于 2015-9-16 15:33 编辑 ]
2015-09-16 15:31
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
不行,首先你的数组在运行时每次只给一个元素赋值其他元素没有值,其次你的思路也有问题暴力求解的话每个元素应该取到各种结果

一片落叶掉进了回忆的流年。
2015-09-16 19:07
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:15 
如果真像http://news.里说的规则,还必须就像上一个帖子里小白同志的说法才有解,对1-8的数全排列后代入矩阵中即可,代码如下:
程序代码:
#include <stdio.h>
void swap(int &a,int &b)
{
    int t;
    t=a;
    a=b;
    b=t;
}
int sum(int *p)
{
    int a[3][3],*t,i,j;
    t=&a[0][0];
    for(i=0,j=0;i<8;i++,j++)
    {
        if(i==2)
        {
            t[j]=9;
            j++;
        }
        t[j]=p[i];
    }
    j=1;
    if((a[0][0]+a[0][1])-a[0][2]!=4)j=0;
    if((a[1][0]-a[1][1])*a[1][2]!=4)j=0;
    if((a[2][0]+a[2][1])-a[2][2]!=4)j=0;
    if((a[0][0]+a[1][0])/a[2][0]!=4)j=0;
    if((a[0][1]-a[1][1])*a[2][1]!=4)j=0;
    if((a[0][2]-a[1][2])-a[2][2]!=4)j=0;
    if(j)
    {
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)printf("%d ",a[i][j]);
            printf("\n");
        }
    }
    return j;
}

void permutation(int array[], int begin, int end) 
{ 
    int i; 

 
    if(begin == end)
    {
        if(sum(array))printf("\n");
        return; 
    }
    else
    { 
        for(i = begin; i <= end; ++i)
        { 
            swap(array[i], array[begin]); 
            permutation(array, begin + 1, end); 
            swap(array[i], array[begin]); 
        } 
    } 
} 
void main()
{
    int a[9]={1,2,3,4,5,6,7,8};
    permutation(a, 0, 7);
}


能编个毛线衣吗?
2015-09-16 19:18
快速回复:关于前天的一个问题,我有了个新的思路,但是有人跟我说我的方法行不通 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034099 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved