鱼C论坛

 找回密码
 立即注册
查看: 1616|回复: 7

[已解决]大佬帮忙看一下 C的相同字符删除与计数

[复制链接]
发表于 2019-2-25 20:50:21 | 显示全部楼层 |阅读模式
10鱼币
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<ctype.h>
  5. #include<string.h>
  6. #define N 50
  7. int main()
  8. {
  9.     int b[N]={0,0,1,2,2,3,4,4,4,4,5,5,5,5,6,7,8,8,9,9};
  10.     int times[N]={0};
  11.     int i,j,k=0,count,n=N;
  12.     for(i=0; i<n; i++)
  13.     {
  14.         count=1;
  15.         for(j=i; j<n; j++)
  16.         {
  17.             if(b[j]==b[j+1])
  18.             count++;
  19.             else
  20.             {
  21.                 times[k++]=count;
  22.                 i=j;
  23.                 break;
  24.             }
  25.         }   
  26.         if(b[n-1]!=b[n-2] && i==n-1)
  27.             times[k++]=count;
  28.     }   
  29.     j=1;
  30.     for(i=1; i<n; i++)
  31.     {
  32.         if(b[j-1]!=b[i])
  33.         b[j++]=b[i];
  34.     }
  35.     for(i=0; i<k; i++)
  36.     printf("%d &#179;&#246;&#207;&#214; %d&#180;&#206;\n",b[i],times[i]);
  37. }
复制代码

最佳答案
2019-2-25 20:50:22
本帖最后由 jackz007 于 2019-2-26 11:00 编辑
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. #define N 50

  5. int main()
  6. {
  7.         int b[N]={0 , 0 , 1 , 2 , 2 , 3 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 6 , 7 , 8 , 8 , 9 , 9} ;
  8.         int times[N] = {0}                                                                       ;
  9.         int i , k = 1                                                                            ;
  10.         times[k - 1] = 1                                                                         ;
  11.         for(i = 1 ; i < N ; i ++) {
  12.                 if (b[i] == b[k - 1]) times[k - 1] ++                                            ;  // 目标元素与当前备案比较,如果相同则计数值增 1
  13.                 else {                                                                                      
  14.                         if (b[i] < b[k - 1]) break                                               ;  // 如果目标元素比当前备案值小则结束循环
  15.                         else {
  16.                                 k ++                                                             ;  // 目标元素与备案元素不同,备案索引 k 增 1
  17.                                 b[k - 1] = b[i]                                                  ;  // 为新元素建立备案
  18.                                 times[k - 1] = 1                                                 ;  // 把新元素出现的次数初始化为 1
  19.                         }
  20.                 }
  21.         }
  22.         for(i = 0 ; i < k ; i ++) printf("%d 出现 %d次\n" , b[i] , times[i])                     ;
  23. }
复制代码


    运行情况:
G:\[2019]\00.00.Exercise\C\Count>x
0 出现 2次
1 出现 1次
2 出现 2次
3 出现 1次
4 出现 4次
5 出现 4次
6 出现 1次
7 出现 1次
8 出现 2次
9 出现 2次

G:\[2019]\00.00.Exercise\C\Count>
批注 2019-02-25 204909.jpg

最佳答案

查看完整内容

运行情况: G:\[2019]\00.00.Exercise\C\Count>x 0 出现 2次 1 出现 1次 2 出现 2次 3 出现 1次 4 出现 4次 5 出现 4次 6 出现 1次 7 出现 1次 8 出现 2次 9 出现 2次 G:\[2019]\00.00.Exercise\C\Count>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-25 20:50:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-2-26 11:00 编辑
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. #define N 50

  5. int main()
  6. {
  7.         int b[N]={0 , 0 , 1 , 2 , 2 , 3 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 6 , 7 , 8 , 8 , 9 , 9} ;
  8.         int times[N] = {0}                                                                       ;
  9.         int i , k = 1                                                                            ;
  10.         times[k - 1] = 1                                                                         ;
  11.         for(i = 1 ; i < N ; i ++) {
  12.                 if (b[i] == b[k - 1]) times[k - 1] ++                                            ;  // 目标元素与当前备案比较,如果相同则计数值增 1
  13.                 else {                                                                                      
  14.                         if (b[i] < b[k - 1]) break                                               ;  // 如果目标元素比当前备案值小则结束循环
  15.                         else {
  16.                                 k ++                                                             ;  // 目标元素与备案元素不同,备案索引 k 增 1
  17.                                 b[k - 1] = b[i]                                                  ;  // 为新元素建立备案
  18.                                 times[k - 1] = 1                                                 ;  // 把新元素出现的次数初始化为 1
  19.                         }
  20.                 }
  21.         }
  22.         for(i = 0 ; i < k ; i ++) printf("%d 出现 %d次\n" , b[i] , times[i])                     ;
  23. }
复制代码


    运行情况:
G:\[2019]\00.00.Exercise\C\Count>x
0 出现 2次
1 出现 1次
2 出现 2次
3 出现 1次
4 出现 4次
5 出现 4次
6 出现 1次
7 出现 1次
8 出现 2次
9 出现 2次

G:\[2019]\00.00.Exercise\C\Count>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-25 22:56:14 | 显示全部楼层
这个输出没有问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-25 22:58:31 | 显示全部楼层
int b[N]={0,0,1,2,2,3,4,4,4,4,5,5,5,5,6,7,8,8,9,9};
你的数组前20个为定义的数字,其余30个确实为0啊,没毛病啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-26 12:18:50 | 显示全部楼层
910201513 发表于 2019-2-25 22:58
int b[N]={0,0,1,2,2,3,4,4,4,4,5,5,5,5,6,7,8,8,9,9};
你的数组前20个为定义的数字,其余30个确实为0啊, ...

没注意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-26 12:22:10 | 显示全部楼层
jackz007 发表于 2019-2-25 20:50
运行情况:
G:\[2019]\00.00.Exercise\C\Count>x
0 出现 2次

如果数字不是有序的话就不可以这么做了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-26 12:31:27 | 显示全部楼层
我是个汉子 发表于 2019-2-26 12:22
如果数字不是有序的话就不可以这么做了

      确实如此,代码设计与楼主的实际问题相呼应。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-26 12:35:29 | 显示全部楼层
jackz007 发表于 2019-2-26 12:31
确实如此,代码设计与楼主的实际问题相呼应。

代码够用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 20:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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