鱼C论坛

 找回密码
 立即注册
查看: 984|回复: 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
      数字和字符串交换写成函数的版本
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void swapi(int * a , int * b)
  4. {
  5.         int t                                             ;
  6.         t = * a                                           ;
  7.         * a =  * b                                        ;
  8.         * b = t                                           ;
  9. }

  10. void swaps(char a[] , char b[])
  11. {
  12.         int k , m1 , m2 , m                               ;
  13.         char * c                                          ;
  14.         for(m1 = 0 ; a[m1] ; m1 ++)                       ;
  15.         for(m2 = 0 ; b[m2] ; m2 ++)                       ;
  16.         m = (m2 > m1) ? m2 : m1                           ;
  17.         c = (char *) malloc(sizeof(char) * (m + 1))       ;
  18.         for(k = 0 ; a[k] ; c[k ++] = a[k] , c[k] = '\0')  ;
  19.         for(k = 0 ; b[k] ; a[k ++] = b[k] , a[k] = '\0')  ;
  20.         for(k = 0 ; c[k] ; b[k ++] = c[k] , b[k] = '\0')  ;
  21.         free(c)                                           ;
  22. }

  23. int main()
  24. {
  25.         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}            ;
  26.         int i ,j , k , m , t                                                                                                                                                                                                                            ;
  27.         char  name[][24]={"北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海","江苏","浙江","安徽","福建","广西","山东","河南","湖北","湖南","广东","广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆"} ;
  28.         char s[24]                                                                                                                                                                                                                                      ;
  29.         for(m = sizeof(num) / sizeof(int) , i = 0 ; i < m - 1 ; i ++) {
  30.                 for(j = i + 1 ; j < m ; j ++) {
  31.                         if(num[i] > num[j]) {
  32.                                swapi(& num[i] , & num[j]) ;
  33.                                swaps(name[i] , name[j])   ;
  34.                         }
  35.                 }
  36.         }
  37.         for(k = 0 ; k < m ; k ++) printf("%6s - %d\n" , name[k] , num[k])                                  ;
  38. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  2. int main()
  3. {
  4.         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}            ;
  5.         int i ,j , k , m , t                                                                                                                                                                                                                            ;
  6.         char  name[][24]={"北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海","江苏","浙江","安徽","福建","广西","山东","河南","湖北","湖南","广东","广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆"} ;
  7.         char s[24]                                                                                                                                                                                                                                      ;
  8.         for(m = sizeof(num) / sizeof(int) , i = 0 ; i < m - 1 ; i ++) {
  9.                 for(j = i + 1 ; j < m ; j ++) {
  10.                         if(num[i] > num[j]) {
  11.                                 t = num[j]                                                                 ;
  12.                                 num[j] = num[i]                                                            ;
  13.                                 num[i] = t                                                                 ;
  14.                                 for(k = 0 ; name[i][k] ; k ++ , s[k] = '\0') s[k] = name[i][k]             ;
  15.                                 for(k = 0 ; name[j][k] ; k ++ , name[i][k] = '\0') name[i][k] = name[j][k] ;
  16.                                 for(k = 0 ; s[k] ; k ++ , name[j][k] = '\0') name[j][k] = s[k]             ;
  17.                         }
  18.                 }
  19.         }
  20.         for(k = 0 ; k < m ; k ++) printf("%6s - %d\n" , name[k] , num[k])                                  ;
  21. }
复制代码

        编译、运行实况
  1. D:\00.Excise\C>g++ -o x x.

  2. D:\00.Excise\C>x
  3.   西藏 - 20828
  4.   青海 - 51945
  5.   宁夏 - 61207
  6.   海南 - 93525
  7.   天津 - 162233
  8.   新疆 - 201515
  9.   北京 - 250084
  10. 内蒙古 - 275828
  11.   甘肃 - 338325
  12.   上海 - 345592
  13.   吉林 - 349177
  14.   山西 - 414649
  15.   福建 - 420377
  16.   贵州 - 446686
  17. 黑龙江 - 468616
  18.   陕西 - 487378
  19.   重庆 - 488115
  20.   广西 - 504043
  21.   云南 - 514563
  22.   广西 - 616828
  23.   辽宁 - 672227
  24.   浙江 - 759091
  25.   湖北 - 779566
  26.   安徽 - 853195
  27.   河北 - 928642
  28.   湖南 - 939818
  29.   广东 - 957360
  30.   河南 - 1196924
  31.   江苏 - 1247962
  32.   山东 - 1400109
  33.   四川 - 1412294

  34. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  3. void swapi(int * a , int * b)
  4. {
  5.         int t                                             ;
  6.         t = * a                                           ;
  7.         * a =  * b                                        ;
  8.         * b = t                                           ;
  9. }

  10. void swaps(char a[] , char b[])
  11. {
  12.         int k , m1 , m2 , m                               ;
  13.         char * c                                          ;
  14.         for(m1 = 0 ; a[m1] ; m1 ++)                       ;
  15.         for(m2 = 0 ; b[m2] ; m2 ++)                       ;
  16.         m = (m2 > m1) ? m2 : m1                           ;
  17.         c = (char *) malloc(sizeof(char) * (m + 1))       ;
  18.         for(k = 0 ; a[k] ; c[k ++] = a[k] , c[k] = '\0')  ;
  19.         for(k = 0 ; b[k] ; a[k ++] = b[k] , a[k] = '\0')  ;
  20.         for(k = 0 ; c[k] ; b[k ++] = c[k] , b[k] = '\0')  ;
  21.         free(c)                                           ;
  22. }

  23. int main()
  24. {
  25.         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}            ;
  26.         int i ,j , k , m , t                                                                                                                                                                                                                            ;
  27.         char  name[][24]={"北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海","江苏","浙江","安徽","福建","广西","山东","河南","湖北","湖南","广东","广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆"} ;
  28.         char s[24]                                                                                                                                                                                                                                      ;
  29.         for(m = sizeof(num) / sizeof(int) , i = 0 ; i < m - 1 ; i ++) {
  30.                 for(j = i + 1 ; j < m ; j ++) {
  31.                         if(num[i] > num[j]) {
  32.                                swapi(& num[i] , & num[j]) ;
  33.                                swaps(name[i] , name[j])   ;
  34.                         }
  35.                 }
  36.         }
  37.         for(k = 0 ; k < m ; k ++) printf("%6s - %d\n" , name[k] , num[k])                                  ;
  38. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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