1064 朋友数 (20分)

1064 朋友数 (20分)

如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。

输入格式:

输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于 104。

输出格式:

首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。

输入样例:

8
123 899 51 998 27 33 36 12

      
    

输出样例:

4
3 6 9 26

分析:使用数组的下标作为朋友证号而不是用数组将证号存储下来
优化:为了格式,对同一段数组遍历了两次,感觉有些画蛇添足,也没找到合适的方法同时输出证号总数和朋友证号,不过未超时

在这里插入图片描述

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
    int N;
    scanf("%d",&N);
    int i;
    int num;
    int array[10000]= {0};
    for(i=0; i<N; i++)
    {
        scanf("%d",&num);
        array[getFriendNumber(num)]=1;
        //printf("%d\n",getFriendNumber(num));
    }
    int sum=0;
    for(i=0; i<10000; i++)
    {
        if(array[i]==1)
        {
            sum++;
        }
    }
    printf("%d\n",sum);
    int flag=1;
    for(i=0; i<10000; i++)
    {
        if(array[i]==1)
        {
            if(flag==1)
            {
                printf("%d",i);
                flag = 0;
            }
            else
            {
                printf(" %d",i);
            }
        }
    }
    return 0;
}
//funciton to return a friends number
int getFriendNumber(int num)
{
    int sum=0;
    while(num)
    {
        sum += num%10;
        num/=10;
    }
    return sum;

}

发布了20 篇原创文章 · 获赞 5 · 访问量 2193

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览