专用测试用例没有通过。这是什么错误?

时间:2019-07-12 11:36:58

标签: c++

给出N个三位数字,您的任务是查找所有N个数字的位数,然后根据这些计算出的位数打印可能的对数。

  1. 根据三位数计算位得分的规则:

从3位数字开始,

·提取最大位数并乘以11,然后

·提取最小数字乘以7然后

·将两个结果相加以获得位对。

注意:-位分数应为2位数字,如果以上结果为3位数字,则只需忽略最高有效位。

请考虑以下示例:

说,号码是286

最大数字为8,最小数字为2

因此,8 * 11 + 2 * 7 = 102因此忽略最高有效位,因此位得分= 02。

说,数字是123

最大数字为3,最小数字为1

所以,3 * 11 + 7 * 1 = 40,所以位得分是40。

  1. 根据以上计算出的比特分数配对的规则

成对的条件是

·两个位评分都应处于奇数位置或偶数位置,以便有资格组成一对。

·只有在最高有效数字相同的情况下才可以进行配对,对于给定的有效数字最多可以进行两对。

约束 N <= 500

输入格式 第一行包含一个整数N,表示数字的计数。

第二行包含N个由空格分隔的3位整数

输出 一个整数值,表示位对的数量。

测试用例

说明 示例1

输入

8 234 567 321 321 345 110110767 111

输出

3

说明

获得数字的最高有效位数和最低有效位数并应用规则1中给出的公式后,我们得出的数字的位得分为:

58 12 40 76 40 11 19 18

不。对中可能有3个:

40分别在奇数索引3和5出现两次。因此,这是一对。

12、11、18是偶数索引。因此,从这三位分数中可以得到两对。

因此可能的总对为3

#include <iostream>
#include <vector>
using namespace std;

vector<int> correctBitScores(vector<int>);
vector<int> bitScore(vector<int>);
int findPairs(vector<int>);

int main() {
    int a, b;
    int pairs = 0;
    vector<int> vec;
    vector<int> bitscore;
    cout << "\nEnter count of nos: ";
    cin >> a;
    for (int i = 0; i < a; i++) {
        cin >> b;
        vec.push_back(b);
    }
    bitscore = bitScore(vec);

    pairs = findPairs(bitscore);
    cout << "Max pairs = " << pairs;

    return 0;

}

vector<int> correctBitScores(vector<int> bis) {
    int temp = 0;
    for (size_t i = 0; i < bis.size(); i++) {
        temp = bis[i];
        int count = 0;
        while (temp > 0) {
            temp = temp / 10;
            count++;
        }
        if (count > 2)
            bis[i] = abs(100 - bis[i]);
    }
    /*cout << "\nCorrected" << endl;
    for (int i = 0; i < size(bis); i++) {
        cout << bis[i] << endl;
    }*/
    return bis;
}

int findPairs(vector<int> vec) {
    int count = 0;
    vector<int> odd;
    vector<int> even;
    for (size_t i = 0; i < vec.size(); i++)
        (i % 2 == 0 ? even.push_back(vec[i]) : odd.push_back(vec[i]));

    for (size_t j = 0; j < odd.size(); j++)
        for (size_t k = j + 1; k < odd.size(); k++) {
            if (odd[j] / 10 == odd[k] / 10) {
                count++;
                odd.erase(odd.begin()+j);
            }
        }

    for (size_t j = 0; j < even.size(); j++)
        for (size_t k = j + 1; k < even.size(); k++) {
            if (even[j] / 10 == even[k] / 10) {
                count++;
                even.erase(even.begin() + j);
            }
        }
    return count;
}



vector<int> bitScore(vector<int> v) {
    int temp = 0, rem = 0;
    vector<int> bs;
    for (size_t i = 0; i < v.size(); i++) {
        int max = 0, min = 9;
        temp = v[i];
        while (temp > 0) {
            rem = temp % 10;
            if (min > rem)
                min = rem;
            if (max < rem)
                max = rem;
            temp = temp / 10;
        }
        int bscore = (max * 11) + (min * 7);
        bs.push_back(bscore);
    }
    /*cout << "\nBit Scores = " << endl;
    for (int i = 0; i < size(bs); i++) {
        cout << bs[i] << endl;
    }*/
    bs = correctBitScores(bs);
    return bs;
}

1 个答案:

答案 0 :(得分:-1)

根据对Que的理解,我尝试用非常简单的c ++代码编写代码,您能否再验证一下更多的测试用例。

#include <bits/stdc++.h>
 using namespace std;

int main() {
int n,count=0;

cin>>n;
vector<int>v(n);

for(int i=0;i<n;i++){
    cin>>v[i];
    string s = to_string(v[i]);
    sort(s.begin(),s.end());
    int temp = (s[s.length()-1]-'0')*11 + (s[0] - '0')*7;
    v[i] = temp%100;
}

unordered_map<int ,vector<int>>o,e;
for(int i=0;i<n;i=i+2){
    o[v[i]/10].push_back(i+1);
}
for(int i=1;i<n;i=i+2){
    e[v[i]/10].push_back(i+1);
}
count=0;
for(int i=0;i<10;i++){
    int os=o[i].size(),es=e[i].size();
    if(os==2)
        count++;
    if(es == 2)
        count++;
    if(os>2 || es>2)
        count += 2; 

}

cout<<count;
}