| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1397 人关注过本帖
标题:字符串的题,帮忙看一下为什么不对?
取消只看楼主 加入收藏
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
收藏
已结贴  问题点数:20 回复次数:3 
字符串的题,帮忙看一下为什么不对?
题目描述
设有n个正整数(n≤20) ,将它们联接成一排,组成一个最大的多位整数。
例如:
n=3 时,3 个整数13,312 ,343 联接成的最大整数为:34331213
又如:n=4 时,4 个整数7 ,13 ,4,246 联接成的最大整数为:7424613

输入输出格式
输入格式:
第一行,一个正整数 n 。
第二行,n 个正整数。
输出格式:
一个正整数,表示最大的整数。

我想用dfs做,程序运行出来不对,求帮忙看一下怎么回事?

代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;

struct str{
    char s[100];
}a[25];

int n,visited[25];
char m[1000]={'\0'},temp0[1000]={'\0'};

void dfs(int step,char *ss){
    int i;
    char temp[1000];
    strcpy(temp,ss);
    if(step==21){
      if(strcmp(ss,m)>0) strcpy(m,ss);
      return;
  }
    for(i=1;i<=n;i++){
        if(visited[i]==0){
            strcat(ss,a[i].s);
            visited[i]=1;
            dfs(step+1,ss);
            strcpy(ss,temp);
            visited[i]=0;
        }
    }
}

int main(void){
    int i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%s",a[i].s);
    memset(visited,0,sizeof(visited));
    dfs(1,temp0);
    printf("%s\n",m);
    return 0;
}
   
   
搜索更多相关主题的帖子: 正整数 整数 include char int 
2018-07-20 20:02
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 2楼 zbjzbj
不知道我理解的对不对,是先判断数位是否一样,输出少的,再判断数的大小,输出大的么?
如果是这样,有些数据结果不对。
比如输入:
32 407 135 13 217
应该输出:
4073221713513

按照数位短的,应该先输出13,再输出135。
2018-07-20 23:37
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 2楼 zbjzbj
我的那个程序思路就是直接用深度优先搜索,遍历所有情况,更新最大值。
不知道哪里出了问题,运行不出来。
之前写过找规律先排序再输出,但是总有数据结果不对,后来找不到适用于所有情况的规律,改用暴力的。。
2018-07-20 23:41
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
直接排序就好了,谢谢大佬们。
2018-07-21 10:56
快速回复:字符串的题,帮忙看一下为什么不对?
数据加载中...
 
   



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

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