• HDU 1016Presentation Error


    这是一道典型的DFS题目。幻想有n个箱子,每次都向箱子里扔一个数,(当然第一个是必定是1,因为题目要求按字典序输出)。判断输出的条件就是,当我移动到第n+1个箱子的时候,就要return了,当然还要判断是否能输出。。怎么判断能否输出呢?题目说:组成一个圈子,a[j]+a[j+1]都必须是质数。但是,如果我们在n+1的时候再判断这个,已经很迟了,递归次数太多了。所以,应该是当满足这个条件,我才递归。

    当然,a[1]+a[n]是需要在输出的时候判定的

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int n;
    int book[30];
    int a[30];
    int prime[45];
    int case_time;
    void dfs(int step)
    {
       if (step == n+1)//是否return 
       {
    	   if (prime[a[1]+a[n]])//判断是否能输出
    	   {
    		   int i;
    		   for (i=1;i<n;i++)
    		   {
    			   //printf ("%d ",a[i]);  presensation error
    //注意这样输出会结尾的时候多一个空格 printf ("%d ",a[i]); } printf ("%d ",a[n]); } return ; } else { int i; for (i=1;i<=n;i++) { if (book[i]==0&&prime[i+a[step-1]]) { a[step]=i; book[i]=1; dfs(step+1); book[i]=0; } } return ; } } int main() { prime[2]=1; prime[3]=1; prime[5]=1; prime[7]=1; prime[11]=1; prime[13]=1; prime[17]=1; prime[19]=1; //prime[21]=1; 21不是质数。。。原谅我error了 prime[23]=1; prime[27]=1; prime[29]=1; prime[31]=1; prime[37]=1; //n<20 19+19 起码打到40的表 while (scanf ("%d",&n)!=EOF) { case_time++; memset(book,0,sizeof(book)); //printf ("Case %d: ",case_time); printf("Case %d: ",case_time); a[1]=1; book[1]=1; dfs(2); printf (" "); } //system("pause"); return 0; }

     我觉得注意的就是多了一个空格那里,实在太坑

  • 相关阅读:
    Base64 加密之中文乱码
    JAVA 笔记 ReadWriteLock
    手机上的消息推送
    Erlang 聊天室程序(九) 主题房间2 房间信息管理
    阿里云服务器上安装GCC
    jq实现窗帘式图片
    Oracle版本问题!【急急急】
    解决 VSCode git commit 时 No such file or directory 报错问题
    GIT Authentication failed for错误问题处理
    h5接入微信分享sdk,报错Cannot read property of undefined (reading 'title')
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/5017860.html
Copyright © 2020-2023  润新知