美团编程题——数字字母
发布于 2018-03-22 21:19 5691 次浏览 2 赞 来自 笔试面试  
#include <bits/stdc++.h>

using namespace std;

char s[1005];

int D[20];

int main() {
	scanf("%s", s);
	for(int i = 0; s[i]; ++ i)
		++ D[s[i] - '0'];
	int minp = 0;
	for(int i = 9; i > 0; -- i)
		if(D[i] <= D[minp])
			minp = i;
	if(minp == 0) {
		putchar('1');
		for(int i = 0; i <= D[minp]; ++ i)
			putchar('0');
	} else {
		for(int i = 0; i <= D[minp]; ++ i)
			printf("%d", minp);
	}
	puts("");
	return 0;
}

老铁们都来交流下

\(^o^)/~

24 条回复

# import sys

# def main():

# s = raw_input()

# l = []

# n = []

# for i in range(len(s)):

# l.append(int(s[i]))

# for i in range(1,10):

# n.append(l.count(i))

# zero = l.count(0)

# low = min(n)

# pos = n.index(low)


# if(zero < low):

# sys.stdout.write('1'+'0'*(zero+1))

# else:

# sys.stdout.write(str(pos+1)*(n[pos]+1))


# main()


2018-03-22 21:23
2

写到最后才发现数很可能不在int范围内

做到智障

2018-03-22 21:24

我们不是一道题

2018-03-22 21:28
1

凉了

2018-03-22 21:28
1

感觉大神应该都不会看这个的吧

2018-03-22 21:29
coder_QNYDZWT4 回复 coder_Nq7KqRoI

字符串距离,能看看ac的代码吗?

2018-03-22 21:30

我跟你算法一样,但是只过了7个点,另外3个WA了。

2018-03-22 21:30

S = input()


S = S.strip()

s = list(S)

length= len(s)

for i in range(length):

    s[i] = int(s[i])

    

t = {}

for i in range(10):

    t[i] = 0


for i in s:

    t[i]+=1


print(t)


m_min = t[0]

value = 0

for i in range(10):

    if(t[i]==m_min):

        if(value == 0):

            value = i

    if(t[i] < m_min):

        m_min = t[i]

        value = i

            

#print(value)        

count = 0

if(value==0):

    count = 10**(m_min+1)


else:   

    for j in range(m_min+1):

        count += value*(10**j)

        

    

print(count)


2018-03-22 21:32
#include <iostream>
#include <string>

using namespace std;
int Min(string &str, int bound);
int main()
{
    string numbers;
    getline(cin,numbers);
    cout<<Min(numbers,10);
    return 0;
}
int Min(string &str,int bound){

    int beg;
    int base;
    if(bound==10) {
        beg=1;
        base=0;
    }
    else{
        beg=0;
        base=bound/10;
    }
    size_t pos=string::npos;
    for(int i=beg;i<10;i++){
        if((pos=str.find(i+'0'))==string::npos){
            if(i!=0){
                return i*base+i;
            }else{
                return 1*base+i;
            }

        }
        else{
            str.erase(pos,1);
        }
    }
    return Min(str,bound*10);
}
动归,比如说1-9都出现过了10-100(不包含100,看10,11,22,33,..,99,然后将重复的再从字符串中剔除),
10-100中重复字符串仍然有,那么看100-1000中重复的依次。。。不知道对不对


2018-03-22 21:32

思路都差不多 不过对于0位置的考虑 少考虑了一点 只过了2个点 现在才发现

2018-03-22 21:33
StrDistance {
    (String[] args) { Scanner in = Scanner(System.)String s = in.next().trim()String t = in.next().trim()result = sl = tl = slen = s.length()tlen = t.length()(i = i < sleni++) {
            sl += s.charAt(i) - sl = sl << }
        sl = sl >> (i = i < tleni++) {
            tl += t.charAt(i) - tl = tl << }
        tl = tl >> pow = () Math.(tlen)dist = slen - tlen + count1 = (dist-- > ) {
            result = (sl % pow) ^ tlsl = sl >> (result > ) {
                count1 += result & result = result >> }
        }

        System..print(count1)in.close()}

    (String sString t) {
        result = count = slen = s.length()tlen = t.length()dist = slen - tlen(offset = offset <= distoffset++) {count = (i = i < tleni++) {
                sc = s.charAt(i + offset)tc = t.charAt(i)count += sc == tc ? : }
            result += count}
    }
}
import java.util.Scanner;

public class StrDistance {
    public static void main(String[] args) { //超时
        Scanner in = new Scanner(System.in);
        String s = in.next().trim();
        String t = in.next().trim();

        long result = 0;
        long sl = 0, tl = 0; //char array to bin number
        int slen = s.length(), tlen = t.length();
        for (int i = 0; i < slen; i++) {
            sl += s.charAt(i) - 'a';
            sl = sl << 1;
        }
        sl = sl >> 1;
        for (int i = 0; i < tlen; i++) {
            tl += t.charAt(i) - 'a';
            tl = tl << 1;
        }
        tl = tl >> 1;

        //异或
        long pow = (long) Math.pow(2, tlen);
        int dist = slen - tlen + 1;
        //数1
        int count1 = 0;
        while (dist-- > 0) {
            result = (sl % pow) ^ tl;
            sl = sl >> 1;//pow = pow << 1;

            while (result > 0) {
                count1 += result & 1;
                result = result >> 1;
            }
        }

        System.out.print(count1);
        in.close();
    }

    private void temp(String s, String t) {
        long result = 0; int count = 0;
        int slen = s.length(), tlen = t.length(), dist = slen - tlen;
        for (int offset = 0; offset <= dist; offset++) {// Brute Force
            count = 0;
            for (int i = 0; i < tlen; i++) {
                char sc = s.charAt(i + offset), tc = t.charAt(i);
                count += sc == tc ? 0 : 1;
            }
            result += count;
        }
    }
}

先用的暴力,70%超时了。

后来用位运算,反而只有30%通过...

不知道哪里有点问题

2018-03-22 21:34

#include<iostream>

#include<string>


using namespace std;

int main()

{

string strS, strT;

int sum = 0;

cin >> strS;

cin >> strT;

if (strS.length() >= strT.length())

{

for (int i = 0; i <= (strS.length() - strT.length()); i++)

{

for (int j = 0; j < strT.length(); j++)

{

if (strS[i + j] != strT[j])

{

sum++;

}

}

}

}

cout << sum << endl;

return 0;

}

7个点就原地不动了

2018-03-22 21:35
1

用Python写的,感觉思路没错,在本地IDE测试了几遍都没问题,但是调试通过率却只有20%

s1 = raw_input()

s2 = raw_input()

s1=s1.strip('\n')

s1=s1.strip('\r')

s2=s2.strip('\n')

len1 = len(s1)

len2 = len(s2)

distance = 0

print(s1,' len is :',len1)

print(s2,' len is :',len2)

d = len1 - len2 + 1

s3 = []

for i in range(d):

    s3.append(s1[i:i+len2])

for i in s3:

    for j in range(len2):

        if i[j]!=s2[j]:

            count+=1

print(distance)



2018-03-22 21:37
coder_jG1frKo3 回复 coder_aV9ZH5rF

Soga!!!

2018-03-22 21:40

赛码网完全用不懂啊,本地调试了所有边界条件和一般条件了,程序也按照你的例子写的,怎么到你这就是不行?就算不行你给我返回点为什么不行的错误信息,哪个测试用例错了你说一下行不行?如果有什么特殊的程序入口不能说一下的?赛码网一生黑,垃圾。

2018-03-22 21:43
4
while True:
    a = input()    
    b = input()
    n = len(a)-len(b)+1
    k = 0
    for i in range(n):
        str_c = a[0+i:len(b)+i]
        for j in range(len(b)):
            if str_c[j] != b[j]:
                k += 1
    print k


没通过


2018-03-22 22:06

package pro.kwen.questions;


import java.util.HashMap;

import java.util.Map;

import java.util.Scanner;


public class Main {

private static int getCharToInt(char ch) {

return ch - '0';

}


public static void main(String[] args) {

String input = "";

int a[] = new int[10];

Map<Integer , Integer> map = new HashMap<>();

Scanner sc = new Scanner(System.in);

input = sc.nextLine();

for(int i = 0; i < input.length(); i++) {

a[getCharToInt(input.charAt(i))]++;

}

for(int i = 0; i < a.length; i++) {

map.put(i, a[i]);

}

System.out.println(map);

//如果10种字符都出现了一次 找出现次数最低的和key最小的正数

int min = 0;

for(int i = 0; i < map.size(); i++) {

if(map.get(min) > map.get(i)) {

min = i;

}

}

String result = "";

if(map.get(min) == 0 && (min != 0)) {

result += min;

}else {

if(map.get(0) != 0) {

for(int j = 0; j < map.get(min) + 1; j++) {

result = result + map.get(min);

}

result = result + "0";

}else {

for(int j = 0; j < map.get(min) ; j++) {

result = result + min;

}

result = result + "0";

}

}

System.out.println(result);

sc.close();

}


}

数字字符题想到了找到出现字符次数最低的那个字符 还是后面逻辑没考虑清楚死掉了

2018-03-22 22:06
coder_HNSEMZZ6 回复 coder_3BQ5TNY6

这不是Py3吗

2018-03-22 22:06

#include<stdio.h>

#include<string.h>


#define MAXSIZE 100000


int main(void) {

char S[MAXSIZE];

char T[MAXSIZE];

int i;

int count = 0;

int j;

int times;


scanf("%s%s", &S, &T);

times = strlen(S) - strlen(T) + 1;

for(i = 0; i < times; i++) {

for(j = 0; T[j]; j++) {

if(S[j + i] != T[j]) {

count++;

}

}

}

printf("%d\n", count);


return 0;

}

字符串问题 7个点原地不动了 我的头嗡嗡的

2018-03-22 22:06
coder_HEVYWQ67 回复 coder_QNYDZWT4

import java.util.Scanner;

public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String S= scanner.next(); String T= scanner.next(); char[] ss= S.toCharArray(); char[] tt = T.toCharArray(); int sLength=ss.length; int tLength=tt.length; int size=0; for(int i=0;i<=sLength-tLength;i++){ for(int j=0;j<tLength;j++){ if(tt[j]!=ss[i+j]){ size++; } } } System.out.print(size);

}

} 测试显示是通过的

2018-03-22 22:23

老哥,一样的AC码(~ ̄▽ ̄)~ 

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

#define FOR(x,y) for (int x = 0; x < y; ++x)
#define For(x,y,z) for (int x = y; x <= z; ++x)
#define ms(x,y) memset (x, y, sizeof(x))
const int N = 1010;

int min (int * a)
{
    int x = a[0] + 1, y = 0;
    For(i,1,9) if (a[i] < x) x = a[i], y = i;
    return y;
}

void solve (char * s)
{
    int a[10];
    ms(a,0);
    int l = strlen(s);
    FOR(i,l) ++a[s[i]-'0'];
    int k = min(a);
    if (!k)
    {
        printf ("1");
        FOR(i,a[k]+1) printf ("0");
    }
    else FOR(i,a[k]+1) printf ("%d", k);
    printf ("\n");
}

int main ()
{
    char s[N];
    while (~scanf ("%s", s)) solve (s);
    return 0;
}


2018-03-23 00:33
coder_NCWNR8A3 回复 LymphV

如果数据是 9 3 9 2 9 9 9 9 9 9,不是应该输出11吗,为什么会输出22啊

2018-03-23 15:15
LymphV 回复 coder_NCWNR8A3

老哥,答案不是11也不是22,是1啊

2018-03-23 18:59
coder_79AvbAZQ 回复 coder_B2Anzm4e

跟你写的一样,为什么是0……给的两个用例测试都对……

2018-03-24 09:59
添加回复
回到顶部