找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 6285|回复: 8

C语言中输入任意个数数字记录每个数字出现的次数

[复制链接]
发表于 2015-9-8 21:15:03 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

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

×
用C语言实现输入任意个数的数字,记录这些数字出现的次数。
要求:
1、不能用数组进行记录输入的数字,而是通过while(cin>>i)这个语法输入数字。

疑问:有没有什么办法让缓存里面的数据进行循环遍历。

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2015-9-9 08:52:20 | 显示全部楼层
cin是个class,不是C语言的东西,C语言没有class,C++才有。
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2015-9-9 13:00:41 | 显示全部楼层
额,知道,只是免了麻烦就用C++的输入流而已
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2015-9-9 13:02:44 | 显示全部楼层
0xAA55 发表于 2015-9-9 08:52
cin是个class,不是C语言的东西,C语言没有class,C++才有。

额,知道。只是免了麻烦就用C++的输入函数,请问有什么思想可以解决这个问题吗
回复 赞! 靠!

使用道具 举报

发表于 2015-9-11 00:17:25 | 显示全部楼层
不能用数组可以用文件。直接用文件来存储数字和其次数即可。
回复 赞! 靠!

使用道具 举报

发表于 2015-9-14 02:20:36 | 显示全部楼层
算法请参考这里:
http://www.0xaa55.com/forum.php? ... tid=1281&extra=
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2015-9-14 12:24:23 | 显示全部楼层
cyycoish 发表于 2015-9-14 02:20
算法请参考这里:
http://www.0xaa55.com/forum.php?mod=viewthread&tid=1281&extra=

谢谢你的参考,学习中!!!!!
回复 赞! 靠!

使用道具 举报

发表于 2015-9-18 02:20:04 | 显示全部楼层
帮你写好了,没有用到任何数组,除了该死的指针操作使用C的stdlib库,完全面向对象:
算法思想曾经发过链接,实测有效,你来使用一下:
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #define _INP_
  4. #define _OUP_
  5. #define _UMR_
  6. #define DECLARE__
  7. using namespace std;

  8. typedef struct
  9. {
  10.         int source;
  11.         int times;
  12. }HIPPO;

  13. class Hippocampus
  14. {
  15. public:
  16.         int ctr; //索引
  17.         HIPPO* hippo = NULL; //海马体
  18.         DECLARE__ ~Hippocampus( //析构函数
  19.         _UMR_     void
  20.                 );
  21.         DECLARE__ void CheckItems( //检查记忆
  22.         _INP_     const int num  //要检查的数字
  23.                 );
  24.         DECLARE__ void PrintReport( //打印结果
  25.         _UMR_     void //没有参数
  26.                 );
  27. };

  28. int main()
  29. {
  30.         Hippocampus *hippocampus = new Hippocampus();
  31.         int i;
  32.         while (cin >> i)
  33.         {
  34.                 hippocampus->CheckItems(i);
  35.                 //显示结果
  36.                 cout << "\t输入完毕,结果如下:" << endl;
  37.                 hippocampus->PrintReport();
  38.         }
  39.         //释放资源
  40.         delete hippocampus;
  41. }

  42. void Hippocampus::CheckItems(
  43.         _INP_ const int num
  44.         )
  45. {
  46.         int k, j;
  47.         //海马体空
  48.         if (hippo == NULL)
  49.         {
  50.                 //初始化索引
  51.                 ctr = 1;
  52.                 //申请内存
  53.                 hippo = (HIPPO*)malloc(sizeof(HIPPO));
  54.                 //添加记忆
  55.                 hippo->source = num;
  56.                 hippo->times = 1;
  57.                 return;
  58.         }
  59.         //遍历,指针已经位于开始
  60.         bool bFinded = true;
  61.         for (k = 0; k < ctr; k++, hippo++)
  62.         {
  63.                 if (num == hippo->source) //找到记忆
  64.                 {
  65.                         //次数+1
  66.                         hippo->times++;
  67.                         //跳出循环
  68.                         break;
  69.                 }
  70.                 else
  71.                         bFinded = false;
  72.         }
  73.         //指针指向开始
  74.         for (j = k; j > 0; j--, hippo--);
  75.         //没有记忆
  76.         if (!bFinded)
  77.         {
  78.                 //长度加一
  79.                 ctr++;
  80.                 hippo = (HIPPO*)realloc(hippo, ctr * sizeof(HIPPO));
  81.                 //指针指向末尾
  82.                 for (j = 0; j < ctr - 1; j++, hippo++);
  83.                 //添加记忆
  84.                 hippo->source = num;
  85.                 hippo->times = 1;
  86.                 //指针恢复开始
  87.                 for (j = 0; j < ctr - 1; j++, hippo--);
  88.         }
  89.         return;
  90. }

  91. void Hippocampus::PrintReport(
  92.         void
  93.         )
  94. {
  95.         int k, j;
  96.         //遍历打印
  97.         for (k = 0; k < ctr; k++, hippo++)
  98.         {
  99.                 cout << "\t数字::" << hippo->source << ",";
  100.                 cout << "\t频率::" << hippo->times << endl;
  101.         }
  102.         //恢复指针指向开始
  103.         for (j = k; j > 0; j--, hippo--);
  104. }

  105. Hippocampus::~Hippocampus( //析构函数
  106.         void
  107.         )
  108. {
  109.         //释放资源
  110.         free(hippo);
  111.         hippo = NULL;
  112. }
复制代码
回复 赞! 靠!

使用道具 举报

发表于 2015-9-18 18:35:41 | 显示全部楼层
cyycoish 发表于 2015-9-18 02:20
帮你写好了,没有用到任何数组,除了该死的指针操作使用C的stdlib库,完全面向对象:
算法思想曾经发过链接 ...

这是C和C艹的混合语言,并不推荐这么写。C语言正是因为没有class我才用它的。
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 20:27 , Processed in 0.032603 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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