数据分类

数据分类
标题:数据分类 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。
比如一个数据a=0x01010101,b=3,按照分类方法计算(0x01+0x01+0x01+0x01)%3=1,所以如果c=2,则此a为有效类型,其类型为1,如果c=1,则此a为无效类型;
又比如一个数据a=0x01010103,b=3,按照分类方法计算(0x01+0x01+0x01+0x03)%3=0,所以如果c=2,则此a为有效类型,其类型为0,如果c=0,则此a为无效类型。
输入12个数据,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据,请找到有效类型中包含数据最多的类型,并输出该类型含有多少个数据。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int get_type(unsigned int a,unsigned int b);
void get_dp(int * p,unsigned int arr[])
{
	int i = 0;
	memset(p,0,sizeof(int)*arr[1]);
	for(i=2;i<12;i++)
	{
		unsigned int type = 0;
		type = get_type(arr[i],arr[1]);
		if(type < arr[0])
		{
			p[type]++;
		}
	}
}
int get_max(unsigned int arr[],int * p)
{
	int i = 0;
	int max = -1;
	for(i=0;i<(int)arr[1]+1;i++)
	{
	    if(max < p[i])
		{
			max = p[i];
		}
	}
	return max;
}
void read_data(unsigned int arr[])
{
	int i = 0;
	for(i=0;i<12;++i)
	{
		scanf("%u",&arr[i]);
	}
}
int get_type(unsigned int a,unsigned int b)
{
	int i = 0;
	int sum = 0;
	unsigned int  mm = 255; 
	for(i=0;i<4;i++)
	{
		sum = sum + ((a & mm)>>(8*i));
		mm *= 256;
	}
	return (sum % b);
}
int main()
{
	unsigned int arr[12]={0};
	int * p = NULL;
    read_data(arr);
	p = (int *)malloc(sizeof(int)*(arr[1]+1));
	get_dp(p,arr);	
	printf("%d\n",get_max(arr,p));
	free(p);
	return 0;
}
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int c = sc.nextInt();
        int b = sc.nextInt();
        int[] numArr = new int [10];
        for(int i = 0; i < 10; i++) {
            numArr[i] = sc.nextInt();
        }
        if(0 == c) {
            System.out.println(0);
            return;
        }
        int[] resArr = new int [c];
        int tmp = 0;
        int max = 0;
        for(int i = 0; i < 10; i++) {
            tmp = (int) (numArr[i] / Math.pow(16, 6) + numArr[i] % Math.pow(16, 6) / Math.pow(16, 4)
                    + numArr[i] % Math.pow(16, 4) / Math.pow(16, 2)
                    + numArr[i] % Math.pow(16, 2));
            tmp = tmp % b;
            if(tmp < c) {
                resArr[tmp]++;
            }
        }
        for(int j = 0; j < c; j++) {
            if(resArr[j] > max) {
                max = resArr[j];
            }
        }
        System.out.println(max);
    }

}




全部评论

相关推荐

拿到一个offer了,貌似要996,大小周&nbsp;在纠结去不去。到现在还没有签三方,有点焦虑了
这我也不知道啊:慎重去鼎信,来我们学校宣讲在群里被疯狂质问为什么毁约应届生,hr还不承认。
点赞 评论 收藏
分享
没等来1145&nbsp;0&nbsp;offer&nbsp;0池子&nbsp;安心搞毕设了
牛客673815145号:不如all in俩月测评寄,二测也不理想,不知道能不能澄清之类
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务