zoukankan      html  css  js  c++  java
  • 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
    题解:注释很清楚,用的方法比较麻烦,浪费很多空间,有空再次完善;
     1 #include<stdio.h>
     2 #include<string.h> 
     3 #include<stdlib.h>
     4 int cmp(const void*a, const void*b)
     5 {
     6     return *(int*)a -*(int*)b;    
     7 }
     8  
     9 int main()
    10 {
    11     int N;
    12     scanf("%d",&N);
    13     int arr[N];
    14     int num[N];
    15     //读入数据,并将每个数据的各位之和存储在数组num[]中 
    16     for(int i=0; i<N; i++)
    17     {
    18         scanf("%d",&arr[i]);
    19         int tmp=arr[i];
    20         int sum = 0;
    21         while(tmp)
    22         {
    23             sum+=(tmp%10);
    24             tmp/=10;
    25         }
    26         num[i] = sum;//num数组存储朋友证号 
    27     }    
    28 //    printf("%d
    ",num[7]);
    29     int cnt=0;//cnt为朋友数计数器 
    30     int brr[10000];
    31     int final[N];
    32     memset(final,0,sizeof(final));
    33     for(int i=0; i<N; i++)
    34     {
    35         brr[num[i]] = 0;
    36     }
    37     for(int i=0; i<N-1; i++)
    38     {    
    39         if(brr[num[i]])
    40                 continue;
    41         for(int j=i+1; j<N; j++)
    42         {
    43             if(brr[num[j]])
    44                 continue;
    45             if(num[i] == num[j])
    46             {
    47                 brr[num[j]] = 1;
    48                 final[cnt++] = num[i];  
    49             }
    50         }
    51     }
    52     //单独证书自己的朋友数统计 
    53     for(int i=0; i<N; i++)
    54     {
    55         if(!brr[num[i]])
    56             final[cnt++] = num[i];
    57     }
    58     //排序
    59     qsort(final,cnt,sizeof(int),cmp);
    60     //输出相异朋友证号总数
    61     printf("%d
    ",cnt);
    62     //输出升序排列的朋友数
    63     for(int i=0; i<cnt; i++)
    64     {
    65         if(i!=cnt-1)
    66         printf("%d ",final[i]);
    67         else
    68         printf("%d",final[i]);    
    69     } 
    70      
    71     
    72     return 0;
    73  } 
  • 相关阅读:
    路飞学城Python-Day48
    路飞学城Python-Day46
    路飞学城Python-Day43
    路飞学城Python-Day42
    路飞学城Python-Day40(第四模块复习题)
    路飞学城Python-Day39(第四模块复习题)
    python小练习
    微信小程序常见错误及基本排除方法
    CSS文本样式
    小程序-广告轮播/控制属性
  • 原文地址:https://www.cnblogs.com/valar/p/6159729.html
Copyright © 2011-2022 走看看