| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1679 人关注过本帖, 1 人收藏
标题:对于《编程题》的帖子自己所作的程序,自己很满意,众位请评判。
只看楼主 加入收藏
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
结帖率:94.74%
收藏(1)
 问题点数:0 回复次数:19 
对于《编程题》的帖子自己所作的程序,自己很满意,众位请评判。
程序代码:
/*
此程序为避免死循环,特加一变量控制,当循环过4次后,跳出while循环,结束程序.  

由于鄙人新手,所以所作程序难免有些欠妥,不免让高手们贻笑大方。哪有待改进之处,还望各位不误吝指教,谢谢。
*/
#include<stdio.h>
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~输入一个四位数*/
int shuru()    
{
        int i;
        char c;
        do
        {
                system("cls");
                printf("请输入一个四位整数:\n");
                scanf("%d",&i);
                while(c=getchar()!='\n'&&c!=EOF);
                puts(" ");
                if(i<1000||i>9999)
                {
                        printf("您的输入有误,请重新输入。\n");
                        sleep(1);
                }
        }
        while(i<1000||i>9999);

        return i;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~转换*/
void zhuanhuan(int *a,int *b)
{
        int t;
        t=*a;
        *a=*b;
        *b=t;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~逆排序*/
int paixu_n(int a)
{
        int b[4],i,j;
        b[0]=a/1000;
        b[1]=(a-b[0]*1000)/100;
        b[2]=(a-b[0]*1000-b[1]*100)/10;
        b[3]=a%10;
        for(i=0;i<4;i++)
                for(j=0;j<4;j++)
                        if(b[j]<b[i])
                                zhuanhuan(&b[i],&b[j]);
        return b[0]*1000+b[1]*100+b[2]*10+b[3];
}
/*?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 顺排序*/
int paixu_s(int a)
{
        int b[4],i,j;
        b[0]=a/1000;
        b[1]=(a-b[0]*1000)/100;
        b[2]=(a-b[0]*1000-b[1]*100)/10;
        b[3]=a%10;
        for(i=0;i<4;i++)
                for(j=0;j<4;j++)
                        if(b[j]>b[i])
                                zhuanhuan(&b[i],&b[j]);
        return b[0]*1000+b[1]*100+b[2]*10+b[3];
}

/*###################################################### 主函数*/
int main(void)
{
        int yuansu,zhuanhuan_s,zhuanhuan_n,zhi;
        int i=0;
        yuansu=shuru();      /*~~~~~~~~输入四位数*/
        zhuanhuan_n=paixu_n(yuansu);/*~~~~~~~~~~~~~~首次将这四位数转换为逆序*/
        while(1)
        {
                zhuanhuan_n=paixu_n(zhuanhuan_n);/*~~~~~~~~~~循环一次以后,将新得到的数字再排序*/
                zhuanhuan_s=paixu_s(zhuanhuan_n);/*~~~~~~~~~将逆序的数字顺序排列*/
                zhuanhuan_n-=zhuanhuan_s;  /*~逆序与顺序数相减,新值赋与变量zhuanhuan_n */
                printf("%d\n",zhuanhuan_n);/*~~~输出得到的结果*/
                if(zhuanhuan_n==6174)
                        i++;  /*~~~~~~~~~~~~~当值为死循环值时,i值增1*/
                if(i>=3)
                        break;  /*~~~~~~~~~~当死循环4次后,跳出程序*/
        }

        printf("*******************************\n\n%d\n",zhuanhuan_n);


        getch();
}
     
搜索更多相关主题的帖子: 编程题 帖子 评判 
2008-04-10 20:51
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
小广用英语做变量和函数名字吧..看起来要好看点...

学习需要安静。。海盗要重新来过。。
2008-04-10 20:55
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
收藏
得分:0 
顶了  然后睡觉咯 明天还有课  有点长 但是思路很清晰 我也就大概看了下  不错 方法有待于改进  我从学C 进来就是看你的程序开始的 O

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-10 20:55
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
想告诉LZ,你的代码稍显累赘

#include <stdio.h>
#define STR_INFO "please input a positive number(input negative will return):"
int GetNext(int n) //Get next number in the sequence
{
    int c[10]={0},m=0,t,s;
    for(; n; n/=10)++c[n%10];
    for(t=9;t>=0;--t)
        {
        for(s=0;s<c[t];++s) n = n*10+t;
        }
    for(t=0;t<=9;++t)
        {
        for(s=0;s<c[t];++s) m = m*10+t;
        }
    return n-m;
}
int Deal() // I/O and deal
{
    int n=0,rs,c=0;
    do{
        printf(STR_INFO);
        rs=scanf("%d", &n);
        while((c=getchar())!='\n')
            {
            if(c==EOF) return 0;
            }
        if(n>=10000)return 1;
    }while(rs!=1);
    if(n<0) return 0;
    while(c!=n)
        {
        c = n, n = GetNext(c);
        }
    printf("Stop at %d\n", n);
    return 1;
}
int main( void ) // main function
{
    while(Deal());
    return 0;
}


" border="0" />[color=white]

[[it] 本帖最后由 雨中飞燕 于 2008-4-10 22:24 编辑 [/it]]
2008-04-10 21:09
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 2# 的帖子
对不起,偶是“鹰盲”。呵呵,不过以后慢慢会多学习些的,毕竟现在已经知道了max的意思了,算是纵向提高了一下。

    谢谢你,希望以后多得到你的批评与帮助。
2008-04-10 21:11
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
[bo]以下是引用 [un]雨中飞燕[/un] 在 2008-4-10 21:09 的发言:[/bo]

先占个位留准备帖代码。。。。。

想告诉LZ,你的代码稍显累赘

http://blog.



哈哈,真有意思,这也不是大学生自习室,还要占座儿~~~

笑得我肠子都快拧劲了~~~~~~~~~

不过对于你的批评,我接受。
第一:由于我的思想好象过于优柔寡断,所以程序好象有些过于繁复,以后会注意改进;
第二:由于我的修炼还欠火候,所以对于程序的节奏和语法还有待提高,谢谢你的批评,我会努力。
2008-04-10 21:15
kahuna
Rank: 1
等 级:新手上路
帖 子:24
专家分:5
注 册:2007-10-30
收藏
得分:0 
(1)两次排序可以用一个函数比如说
paixu(int a,int b)
参数b用来控制 升序 还是 降序
比如 b==1升序 b==0降序
if(b==1){
    if(b[j]>b[i])
        zhuanhuan(&b[i],&b[j]);
}else if(b==0)
{
    if(b[j]>b[i])
        zhuanhuan(&b[i],&b[j]);
}
(2)用快速排序尽量少用冒泡
(3)从顺序转逆序别用排序,用个转换就行了
int b[4];
int i=0;
while(a){
    b[i] = a%10;
    a = a/10;
    i++;
}
2008-04-10 21:56
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
[bo]以下是引用 [un]广陵绝唱[/un] 在 2008-4-10 21:15 的发言:[/bo]
第一:由于我的思想好象过于优柔寡断,所以程序好象有些过于繁复,以后会注意改进;
第二:由于我的修炼还欠火候,所以对于程序的节奏和语法还有待提高,谢谢你的批评,我会努力。

你喜欢笑就慢慢笑啰
其实我很奇怪你居然可以漏掉算法
代码发好了,因为手工高亮的问题弄了好一会儿,不好意思

" border="0" />
2008-04-10 22:02
kahuna
Rank: 1
等 级:新手上路
帖 子:24
专家分:5
注 册:2007-10-30
收藏
得分:0 
雨中飞燕
的风格很另类啊
也许是我孤陋了
问一下
n&gt;=10000
n&lt;0
遵循的是那个标准
2008-04-10 22:05
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
[bo]以下是引用 [un]kahuna[/un] 在 2008-4-10 22:05 的发言:[/bo]

雨中飞燕
的风格很另类啊
也许是我孤陋了
问一下
n>=10000
n<0
遵循的是那个标准

你这个看的是偶还没有弄好的代码,谢谢

" border="0" />[color=white]

[[it] 本帖最后由 雨中飞燕 于 2008-4-10 22:14 编辑 [/it]]
2008-04-10 22:07
快速回复:对于《编程题》的帖子自己所作的程序,自己很满意,众位请评判。
数据加载中...
 
   



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

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