49,439
社区成员




题目:小蓝有很多数字卡片,每张卡片上都是数字 00 到 99。
小蓝准备用这些卡片来拼一些数,他想从 11 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 11 拼到多少。
例如,当小蓝有 3030 张卡片,其中 00 到 99 各 33 张,则小蓝可以拼出 11 到 1010,
但是拼 1111 时卡片 11 已经只有一张了,不够拼出 1111。
现在小蓝手里有 00 到 99 的卡片各 20212021 张,共 2021020210 张,请问小蓝可以从 11 拼到多少?
思路:暴力尝试,记录每一个数字用的次数,任何一个数字用过2021次则结束。
代码:
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
int cnt[10]={0};
for(int i=1;;i++)
{
int num=i;
while(num)
{
cnt[num%10]++;
if(cnt[num%10]==2021)
{
cout<<i<<endl;
return 0;
}
num/=10;
}
}
return 0;
}
题目:小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。
小蓝的图由 2021 个结点组成,依次编号 1 至 2021。
对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。
例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点 25 之间有一条无向边,长度为 75。
请计算,结点 1 和结点 2021 之间的最短路径长度是多少。
思路:好难,为甚么那么大的数,似乎题目读错了,我的想法是每次+20,最后只有103040.可恶
错误代码:
#include <iostream>
using namespace std;
int gcd(int x,int y)
{
return !y?x:gcd(y,x%y);
}
int main()
{
// 请在此输入您的代码
int i,ans=19;
for(i=20;i<=2021;i+=20)
{
ans+=i;
}
i-=21;
ans+=gcd(i,2021);
cout<<ans<<endl;
return 0;
}
题目:给定一个只包含大写字母的字符串 �S, 请你输出其中出现次数最多的字符。
如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。
思路:还是考计数器,统计
代码:
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
string s;
cin>>s;
int cnt[26]={0};
int mx=0;
for(int i=0;i<s.size();i++)
{
cnt[s[i]-'A']++;
if(cnt[s[i]-'A']>mx) mx=cnt[s[i]-'A'];
}
for(int i=0;i<26;i++)
{
if(cnt[i]==mx)
{
char zm='A'+i;
cout<<zm;
}
}
return 0;
}