鱼C论坛

 找回密码
 立即注册
查看: 904|回复: 3

[已解决]超级简单

[复制链接]
发表于 2020-11-23 20:32:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

int main()
{
        int num[]={250084,162233,928642,414649,275828,672227,349177,468616,345592,1247962,759091,853195,420377,504043,1400109,1196924,779566,939818,957360,616828,93525,488115,1412294,446686,514563,20828,487378,338325,51945,61207,201515};
     char  *name[]={"北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海","江苏","浙江","安徽","福建","广西","山东","河南","湖北","湖南","广东","广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆"};
        int i,j,tmp1,tmp2,a,b;
        for(i=1;i<=30;i++)
        {
                for(j=0;j<=30-1-i;j++)
                {
                        if(num[j]>num[j+1])
                        {
                                tmp1=num[j];
                                num[j]=num[j+1];
                                num[j+1]=tmp1;
                                tmp2[0]=name[j];
                                name[j]=name[j+1];
                                name[j+1]=tmp2;

                        }
                }
        }
        for(i=0,a=0,b=0;i<31;a++,b++,i++)
        {
                printf("%3c  %3d",name[a],num[b]);
        }
        return 0;
}


//我这个是要给数字和对应的城市排序,现在有两个问题,一个是char类型数组,装不了这么多字符串,怎么解决?还有i一个问题是,tmp2怎么表示,tmp2是暂时储存字符串的东西,就是两个字符串的位置交换的时候要用到。。。。
最佳答案
2020-11-23 21:20:40
      数字和字符串交换写成函数的版本
#include <stdio.h>
#include <stdlib.h>

void swapi(int * a , int * b)
{
        int t                                             ;
        t = * a                                           ;
        * a =  * b                                        ;
        * b = t                                           ;
}

void swaps(char a[] , char b[])
{
        int k , m1 , m2 , m                               ;
        char * c                                          ;
        for(m1 = 0 ; a[m1] ; m1 ++)                       ;
        for(m2 = 0 ; b[m2] ; m2 ++)                       ;
        m = (m2 > m1) ? m2 : m1                           ;
        c = (char *) malloc(sizeof(char) * (m + 1))       ; 
        for(k = 0 ; a[k] ; c[k ++] = a[k] , c[k] = '\0')  ;
        for(k = 0 ; b[k] ; a[k ++] = b[k] , a[k] = '\0')  ;
        for(k = 0 ; c[k] ; b[k ++] = c[k] , b[k] = '\0')  ;
        free(c)                                           ;
}

int main()
{
        int num[]={250084,162233,928642,414649,275828,672227,349177,468616,345592,1247962,759091,853195,420377,504043,1400109,1196924,779566,939818,957360,616828,93525,488115,1412294,446686,514563,20828,487378,338325,51945,61207,201515}            ;
        int i ,j , k , m , t                                                                                                                                                                                                                            ; 
        char  name[][24]={"北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海","江苏","浙江","安徽","福建","广西","山东","河南","湖北","湖南","广东","广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆"} ;
        char s[24]                                                                                                                                                                                                                                      ;
        for(m = sizeof(num) / sizeof(int) , i = 0 ; i < m - 1 ; i ++) {
                for(j = i + 1 ; j < m ; j ++) {
                        if(num[i] > num[j]) {
                               swapi(& num[i] , & num[j]) ;
                               swaps(name[i] , name[j])   ;
                        }
                }
        }
        for(k = 0 ; k < m ; k ++) printf("%6s - %d\n" , name[k] , num[k])                                  ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 21:02:34 | 显示全部楼层
#include <stdio.h>

int main()
{
        int num[]={250084,162233,928642,414649,275828,672227,349177,468616,345592,1247962,759091,853195,420377,504043,1400109,1196924,779566,939818,957360,616828,93525,488115,1412294,446686,514563,20828,487378,338325,51945,61207,201515}            ;
        int i ,j , k , m , t                                                                                                                                                                                                                            ; 
        char  name[][24]={"北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海","江苏","浙江","安徽","福建","广西","山东","河南","湖北","湖南","广东","广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆"} ;
        char s[24]                                                                                                                                                                                                                                      ;
        for(m = sizeof(num) / sizeof(int) , i = 0 ; i < m - 1 ; i ++) {
                for(j = i + 1 ; j < m ; j ++) {
                        if(num[i] > num[j]) {
                                t = num[j]                                                                 ;
                                num[j] = num[i]                                                            ;
                                num[i] = t                                                                 ;
                                for(k = 0 ; name[i][k] ; k ++ , s[k] = '\0') s[k] = name[i][k]             ;
                                for(k = 0 ; name[j][k] ; k ++ , name[i][k] = '\0') name[i][k] = name[j][k] ;
                                for(k = 0 ; s[k] ; k ++ , name[j][k] = '\0') name[j][k] = s[k]             ;
                        }
                }
        }
        for(k = 0 ; k < m ; k ++) printf("%6s - %d\n" , name[k] , num[k])                                  ;
}
        编译、运行实况
D:\00.Excise\C>g++ -o x x.

D:\00.Excise\C>x
  西藏 - 20828
  青海 - 51945
  宁夏 - 61207
  海南 - 93525
  天津 - 162233
  新疆 - 201515
  北京 - 250084
内蒙古 - 275828
  甘肃 - 338325
  上海 - 345592
  吉林 - 349177
  山西 - 414649
  福建 - 420377
  贵州 - 446686
黑龙江 - 468616
  陕西 - 487378
  重庆 - 488115
  广西 - 504043
  云南 - 514563
  广西 - 616828
  辽宁 - 672227
  浙江 - 759091
  湖北 - 779566
  安徽 - 853195
  河北 - 928642
  湖南 - 939818
  广东 - 957360
  河南 - 1196924
  江苏 - 1247962
  山东 - 1400109
  四川 - 1412294

D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 21:20:40 | 显示全部楼层    本楼为最佳答案   
      数字和字符串交换写成函数的版本
#include <stdio.h>
#include <stdlib.h>

void swapi(int * a , int * b)
{
        int t                                             ;
        t = * a                                           ;
        * a =  * b                                        ;
        * b = t                                           ;
}

void swaps(char a[] , char b[])
{
        int k , m1 , m2 , m                               ;
        char * c                                          ;
        for(m1 = 0 ; a[m1] ; m1 ++)                       ;
        for(m2 = 0 ; b[m2] ; m2 ++)                       ;
        m = (m2 > m1) ? m2 : m1                           ;
        c = (char *) malloc(sizeof(char) * (m + 1))       ; 
        for(k = 0 ; a[k] ; c[k ++] = a[k] , c[k] = '\0')  ;
        for(k = 0 ; b[k] ; a[k ++] = b[k] , a[k] = '\0')  ;
        for(k = 0 ; c[k] ; b[k ++] = c[k] , b[k] = '\0')  ;
        free(c)                                           ;
}

int main()
{
        int num[]={250084,162233,928642,414649,275828,672227,349177,468616,345592,1247962,759091,853195,420377,504043,1400109,1196924,779566,939818,957360,616828,93525,488115,1412294,446686,514563,20828,487378,338325,51945,61207,201515}            ;
        int i ,j , k , m , t                                                                                                                                                                                                                            ; 
        char  name[][24]={"北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海","江苏","浙江","安徽","福建","广西","山东","河南","湖北","湖南","广东","广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆"} ;
        char s[24]                                                                                                                                                                                                                                      ;
        for(m = sizeof(num) / sizeof(int) , i = 0 ; i < m - 1 ; i ++) {
                for(j = i + 1 ; j < m ; j ++) {
                        if(num[i] > num[j]) {
                               swapi(& num[i] , & num[j]) ;
                               swaps(name[i] , name[j])   ;
                        }
                }
        }
        for(k = 0 ; k < m ; k ++) printf("%6s - %d\n" , name[k] , num[k])                                  ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 22:21:41 | 显示全部楼层
虽然我自己已经打出来了,但是你能回答我的问题,来帮我,我还是非常感动地,一个最佳回答属于你。。。

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
昨非 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表