洛谷 [P4325]Modulo

题目传送门OvO


题目描述

Given two integers A and B, A modulo B is the remainder when dividing A by B. For example, the numbers 7, 14, 27 and 38 become 1, 2, 0 and 2, modulo 3. Write a program that accepts 10 numbers as input and outputs the number of distinct numbers in the input, if the numbers are considered modulo 42.

输入输出格式

输入格式:

The input will contain 10 non-negative integers, each smaller than 1000, one per line.

输出格式:

Output the number of distinct values when considered modulo 42 on a single line.


好,还是大概的翻译一下题目(摘自luogu的翻译)

给出10个整数,问这些整数%42后有多少个不同的余数。 输入
输入包含10个小于1000的非负整数,每行一个。 输出
输出它们%42后,有多少个不同的余数。

还是很简单的
一边读入一边记录进桶(存入数组),a[x%42],把所有%42后的答案记录下来,
最后一遍循环统计:
i=0…41 a[i]==1 ans++
意思就是枚举0到41(所有数%42都只会得出0~41),如果这十个数中有一个数%42等于枚举的数(因为一开始已经记录进a数组,所以直接判断a),计数器就加1.

大概这么写:

#include
using namespace std;
int ans,a[42],x;
int main()
{
    for (int i=1;i<=10;i++)//循环(十个数)十次
    {
        scanf("%d",&x);//输入
        a[x%42]=1;//记录进桶
    }
    for (int i=0;i<42;i++) 

    //枚举,记住0也要枚举,0或42的倍数%42都等于0
     if (a[i]) ans++; //计数器+1
    printf("%d",ans);//愉快输出
    return 0;
}

如果你是学C++的,那么你会知道一个有意思的东西叫做STL
那么一切都变得很好办了!

//(sort:排序,unique,去重)
#include
using namespace std;
int k,a[10];
int main()
{
    for(int i=0;i<10;i++)
    {
        scanf("%d",&k);
        a[i]=k%42;
    }
    sort(a,a+10);//先排序才能
    int c=unique(a,a+10)-a;//去重后的长度为c
    printf("%d",c);
    return 0;
}

你可能感兴趣的:(题解)