华为昨天晚上在我们学校补录的笔试题,谁能解释一下

对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加%一个给定的值b,如果得到的结果小于一个给定的值c,则此结果即为数据a的类型;如果得到的结果大于或者等于c,则此结果无效即为数据a的类型无效。比如一个数据a=0x01010101,b=3,按照分类方法计算(0x01+0x01+0x01+0x01)%3=1,所以如果c=2,则此a的类型是1,如果c=1,则此a的类型是无效。输入12个数据,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据a。计算数据最多的类型(有效类型)有多少个数据。
输入描述:
输入12个数据,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据a。
输出描述:
计算数据最多的类型(有效类型)有多少个数据。
示例1
输入
5、2、1、2、3、4、5、6、7、8、9、10
输出
5

#华为#
全部评论
import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         String str = in.nextLine();         String[] strs = str.split("\\、");         int c = Integer.parseInt(strs[0]);         int b = Integer.parseInt(strs[1]);         int f1,f2,f3,f4;         int count = 1;         Map<Integer, Integer> map = new HashMap<>();         for(int i = 2;i < strs.length; ++i) {             int temp = Integer.parseInt(strs[i]);             f1 = temp >> 24;             f2 = (temp & 0x00FFFFFF)>>16;             f3 = (temp  & 0x0000FFFF) >> 8;             f4 = (temp & 0x000000FF);             int sum = f1 + f2 + f3 + f4;             int tt = sum % b;             if(tt < c) {                 if(map.containsKey(tt)) {                     int x = map.get(tt) + 1;                     map.put(tt, x);                     if(x > count) {                         count = x;                     }                 } else {                     map.put(tt, 1);                 }                              }         }         System.out.println(count);              } }
点赞 回复
分享
发布于 2017-11-15 09:13
这题说的是啥意思 没懂 看起像16进制又像二进制 不知道他是怎么加法 出题的就是***
2 回复
分享
发布于 2021-04-21 15:44
阿里巴巴
校招火热招聘中
官网直投
对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加%一个给定的值b,如果得到的结果小于一个给定的值c,则此结果即为数据a的类型;如果得到的结果大于或者等于c,则此结果无效即为数据a的类型无效。比如一个数据a=0x01010101,b=3,按照分类方法计算(0x01+0x01+0x01+0x01)%3=1,所以如果c=2,则此a的类型是1,如果c=1,则此a的类型是无效。输入12个数据,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据a。计算数据最多的类型(有效类型)有多少个数据。
点赞 回复
分享
发布于 2017-11-14 09:30
审题审了两小时
点赞 回复
分享
发布于 2017-11-14 09:31
这题目有啥难度吗……
点赞 回复
分享
发布于 2017-11-14 09:48
济南吗?
点赞 回复
分享
发布于 2017-11-14 10:12
先将数据a(10个)转为二进制,然后按字节对b求余,再与c判断进行分类,最后在分的类中找出类型最多的数据个数
点赞 回复
分享
发布于 2017-11-14 10:19
刚刚做了,其实是5个05个1,然后最大的相同类型就是5了,表示审题审了好久。。。。。。
点赞 回复
分享
发布于 2017-11-14 17:00
我也很奇怪,对2取余只有0和1啊??郁闷。 楼主这一批什么时候发offer通知呢?
点赞 回复
分享
发布于 2017-11-16 10:55
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char s[100]; fgets(s, 100, stdin); int nums[12] = {0}; int resultCnt[10] = {0}; int index = 0; char *p; const char *d = "、"; p = strtok(s, d); while (p) { sscanf(p, "%d", &nums[index++]); p = strtok(NULL, d); } int maxCnt = 0; int c = nums[0]; int b = nums[1]; for (int i = 2; i < 12; ++i) { int a = nums[i]; unsigned char *cp = (unsigned char *)&a; int sum = cp[0] + cp[1] + cp[2] + cp[3]; int remain = sum % b; if (remain < c) { resultCnt[remain]++; } } int max = 0; for (int i = 0; i < 10; ++i) { if (resultCnt[i] > max) { max = resultCnt[i]; } } printf("%d\n", max); return 0; }
点赞 回复
分享
发布于 2018-08-31 00:20
# -*- coding: UTF-8 -*- import sys result = {} while True:      try:         values = sys.stdin.readline().strip().split('、')         c, b = int(values[0]), int(values[1])         for value in values[2:]:             bin_ = value.rjust(8,'0')             totle = 0             for index in range(4):                 totle += int(bin_[index*2:(index+1)*2],16)             key = totle%b             if key not in result:                 result[key] = 0             result[key] += 1         print(sorted(result.items(),key = lambda x:x[1],reverse = True)[0][1])         break     except:         break
点赞 回复
分享
发布于 2018-09-17 20:15
前一段时间机试挂在这个题上了。。。。。
点赞 回复
分享
发布于 2018-09-29 11:41
#include<iostream> #include<vector> #include<bitset> using namespace std; int main(void) {     vector<int>a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     int count = 0;     int c = 5, b = 2;     for(int i = 0; i < a.size(); i++){         bitset<8>Q(a[i]);         int sum = 0;         for(int j=0; j<8; j++){             if(j%2 == 0)                 sum += Q[j];             else                 sum += Q[j]*16;         }         sum = sum % b;         if(sum<c && sum != 0)             count++;     }     cout << count << endl;          return 0; }
点赞 回复
分享
发布于 2019-12-15 20:39

相关推荐

2 6 评论
分享
牛客网
牛客企业服务