| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3233 人关注过本帖
标题:请问这道题的输出怎么按字典序排列?
取消只看楼主 加入收藏
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
收藏
已结贴  问题点数:20 回复次数:5 
请问这道题的输出怎么按字典序排列?
在a这个整型数组里有10个元素,大小为1,2或者3,下标从1到10。现在给出一个数,输出满足a中10个数之和为这个数的所有情况,按字典序输出。
没有满足条件的情况则输出0。

我的程序可以输出所有结果,但不是按字典序,想问一下应该怎么改?

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

int a[11],s[10000][11],k=0;


void dfs(int x,int remain){
    int i;
    if(x==0){
      if(remain!=0)
        return;
    }
    if(remain==0){
        for(i=1;i<=10;i++) s[k][i]=a[i];
        k++;
        return;
    }   
    if(a[x]==2){
        a[x]=3;
        dfs(x-1,remain-1);
        a[x]=2;
        dfs(x-1,remain);
    }
    if(a[x]==1){
        a[x]=2;
        dfs(x,remain-1);
        a[x]=1;
        dfs(x-1,remain);
    }
}
   
int main(void){
    int n,i,j;
    scanf("%d",&n);
    if(n<10 || n>30){
        printf("0\n");
        exit(0);
    }
    for(i=0;i<11;i++) a[i]=1;
    dfs(10,n-10);
    printf("%d\n",k);
    for(i=0;i<k;i++){
      for(j=1;j<=9;j++){
          printf("%d ",s[i][j]);
    }
      printf("%d\n",s[i][10]);
}
    return 0;
}
   
搜索更多相关主题的帖子: 输出 字典 int for printf 
2018-06-20 22:41
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 5楼 书生牛犊
不好意思,题目描述地不是很清楚,就是6楼大佬的意思
2018-06-21 16:58
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
我改成字符数组存储了,把所有结果存起来以后按字典序排序,用的strcmp函数,但是输出没变,怎么回事?
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int a[11],k=0;

struct str{
    char s[12];
}s0[10000];


void dfs(int x,int remain){
    int i;
    if(x==0){
      if(remain!=0)
        return;
    }
    if(remain==0){
        for(i=1;i<=10;i++) s0[k].s[i]=a[i]+'0';
        k++;
        return;
    }   
    if(a[x]==1){
        a[x]=2;
        dfs(x,remain-1);
        a[x]=1;
        dfs(x-1,remain);
    }
    if(a[x]==2){
        a[x]=3;
        dfs(x-1,remain-1);
        a[x]=2;
        dfs(x-1,remain);
    }
}

int main(void){
    int n,i,j,t;
    struct str temp;
    scanf("%d",&n);
    if(n<10 || n>30){
        printf("0\n");
        exit(0);
    }
    for(i=0;i<11;i++) a[i]=1;
    dfs(10,n-10);
    printf("%d\n",k);
    for(i=0;i<k-1;i++){            //按字典序排序
        t=i;
        for(j=i+1;j<k;j++){
            if(strcmp(s0[t].s,s0[j].s)) t=j;
        }
        if(t!=i){
            temp=s0[i];
            s0[i]=s0[t];
            s0[t]=temp;
        }
    }
    for(i=0;i<k;i++){
      for(j=1;j<=9;j++){
          printf("%c ",s0[i].s[j]);
    }
      printf("%c\n",s0[i].s[10]);
}
    return 0;
}


[此贴子已经被作者于2018-6-21 17:11编辑过]

2018-06-21 17:09
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
这个题。。时间限制是1秒,10重for循环,没超时,通过了。。
2018-06-21 20:57
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
但是还是想知道为什么我写的程序,按字典序没排出来?
2018-06-21 20:58
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 16楼 lin5161678
把那一句改成  if(strcmp(s0[t].s,s0[j].s)>0) t=j;
还是不行
2018-06-22 20:20
快速回复:请问这道题的输出怎么按字典序排列?
数据加载中...
 
   



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

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