| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 729 人关注过本帖
标题:第六届全国信息技术应用水平大赛复赛试题A卷第二题,欢迎大家来指出不足
只看楼主 加入收藏
shen_131
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2012-10-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
第六届全国信息技术应用水平大赛复赛试题A卷第二题,欢迎大家来指出不足
原题:
2. 编程解决如下问题(50分)。
请在整数n=742683613984中删除8个数字,使得余下的数字按原次序组成的新数最小。要求如下:
(1)整数n和删除数字的个数“8”在源程序中完成赋值,程序直接输出运行结果;
(2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最小数。
(提示:整数n可以以字符数组的方式定义、赋值和处理)

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20

void main()
{
    char m[N]="742683613984",temp[2]={'\0','\0'};
    int n[N];
    int num;        //m的长度
    int sum=0;        //结果
    int left,right;        //左右界限
    int chosen_num[4];    //选中的数的位置
    int num_key=8;

    num=strlen(m);
    for(int i=0;i<num;i++)
    {
        temp[0]=m[i];
        n[i]=atoi(temp);
    }

    left=0;
    right=num_key;

    for(int i=0;i<(num-num_key);i++)
    {
        chosen_num[i]=left;
        for(int j=left;j<=right;j++)
        {
            if(n[chosen_num[i]]>n[j])
                chosen_num[i]=j;
        }
        left=chosen_num[i]+1;
        right+=1;
    }
    for(int i=0;i<4;i++)
    {
        sum=sum*10+n[chosen_num[i]];
        n[chosen_num[i]]=-1;        //被选中的改为0,控制输出
    }
    for(int i=0;i<num-1;i++)
    {
        if(n[i]!=-1)
            printf("%d,",n[i]);
    }
    printf("\n");

    printf("%d\n",sum);
}
VS2010做的,运行正确
搜索更多相关主题的帖子: include 源程序 color 
2012-10-28 22:21
ly2222
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:217
专家分:618
注 册:2012-6-15
收藏
得分:0 
抛砖引玉
2012-10-28 22:47
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
收藏

不过可能由于编译器的原因

我的是vc60   你的程序在多个循环中使用一个变量  不能编译通过  

DO IT YOURSELF !
2012-10-29 08:18
zxd543
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:内蒙古
等 级:贵宾
威 望:17
帖 子:453
专家分:2351
注 册:2012-4-12
收藏
得分:0 
看了半天 感觉很不错
那个双层循环我的水平感觉也很优了

马马虎虎 不吝赐教 我是路过蹭分滴
2012-10-29 11:47
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
看看

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-10-29 12:20
shen_131
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2012-10-28
收藏
得分:0 
回复 3楼 wp231957
可以在for循环外面定义一下i,然后直接for(i=0;..;...)就可以用VC6.0编译了
2012-10-30 13:59
heishu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:42
专家分:131
注 册:2012-9-7
收藏
得分:20 
我是这样做的
程序代码:
#include<stdio.h>
typedef struct ni
{
    int shu;
    int flag;
}laoshu;
laoshu a[]={7,0,4,0,2,0,6,0,8,0,3,0,6,0,1,0,3,0,9,0,8,0,4,0};
int b[8];
int min=9999;
void zuixiao(laoshu *p)
{
    int j,c[4],f=0,he;
    for(j=0;j<12;j++)
    {
        if(p[j].flag==0)
        {c[f]=p[j].shu;
        f++;}
    }
he=c[0]*1000+c[1]*100+c[2]*10+c[3];
if(min>he)
min=he;
}
void qushu(laoshu *p,int j,int n,int k)
{int i;
if(j==n)
{
    for(i=0;i<8;i++)
    printf("%d",b[i]);
    printf(",");
    zuixiao(p);
}
else
{
    for(i=k;i<12;i++)
    {
        b[j]=p[i].shu;
        p[i].flag=1;
        qushu(p,j+1,8,k+1);
        k++;
        p[i].flag=0;
    }
}
}
void main()
{
   
    qushu(a,0,8,0);
printf("最小数为:");
printf("\n%d\n",min);

}

 

[qq]1402050187[/qq]
2012-10-31 21:27
快速回复:第六届全国信息技术应用水平大赛复赛试题A卷第二题,欢迎大家来指出不 ...
数据加载中...
 
   



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

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