求出所有这些不重复数字的个数及它们的和

问题描述每位同学都有一个唯一的学号。现假设学生的学号为10位长的纯数字构成。例如,张三的学号为2119201108。请编写程序,输入学生的学号,完成以下功能:将学号中的数... 问题描述
每位同学都有一个唯一的学号。现假设学生的学号为10位长的纯数字构成。例如,张三的学号为2119201108。请编写程序,输入学生的学号,完成以下功能:
将学号中的数字拆分并去重(注意:学号长度是10位,用int可能存不下)。例如:张三的学号2119201108,拆分去重后,有2、1、9、0、8,共5个不重复的数字,且这5个不重复数字和为:2+1+9+0+8=20。 请求出所有这些不重复数字的个数及它们的和,并输出(输出数据之间用英文空格分割)。

提示
该题可借助数组完成。
先把所有数字拆分存入数组1。
将数组1中的不重复元素存入数组2。每次将数字存入数组2之前,要判断该数字是否已在数组2中,如果已在,就是重复的数字,不要存入;如果不在数组2中,则存入数组2。
根据数组2,计算不重复数字个数及和。

2119201108
输出:
5 20
输入:
2820244220
输出:
4 14
展开
 我来答
格里编程办公技巧
科技发烧友

2021-07-26 · 编程、办公知识分享与学习
格里编程办公技巧
采纳数:434 获赞数:877

向TA提问 私信TA
展开全部

方法思路如下:

第一步:

先建立一张表用于存放数字出现的次数;

第二步

依次遍历学号的每一位,如果对应的表中出现的次数为1,和加1,计数也加1。

最后结果就出来了。

完整代码如下

#include<stdio.h>

int main()

{    

char no[11];    

short table[10] = {0};    

short sum = 0;    

short count = 0;    

fgets(no, sizeof(no), stdin);    

for(int i = 0; no[i]; i++)    

{       

 if(table[no[i] - '0'] == 0)        

{            

table[no[i] - '0'] += 1;           

 sum += no[i] - '0';            

count++;       

 }  

  }    

printf("%d %d\n", count, sum);    

return 0;

}

代码图

听不清啊
高粉答主

2021-07-26 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

#include<stdio.h>

int main()

{ int i,t,a[10]= {0},s=0,n=0;        //a数组用来记录每个数字是否已经出现

  long long x;

  scanf("%lld",&x);

  while(x)

  { t=x%10;

    x/=10;

    if(!a[t])    //只有未出现过的才做

    { n++;    //计数

      s+=t;    //累加

      a[t]=1;    //标记数字t已经出现过

    }

  }

  printf("%d %d\n",n,s);

  return 0;

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式