A-Lucky Ticket
题意:第一行给一个数字n,代表数字的位数;第二行给出数字;规定数字的前一半部分的和与后一半部分的和相等,并且整个数字都是由7或者4构成的数字,我们称为幸运数,让你判断这个数字是不是幸运数,是的话就输出YES,不是则输出NO。
思路:按照题意进行模拟就可以,前一半部分和后一半部分的和可以用ascii来表示。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string t;
cin>>t;
int sum1 = 0,sum2 = 0;
int flag = 0;
for(int i = 0;i<n/2;i++)
{
sum1+=int(t[i]-'0');
}for(int i = n/2;i<n;i++)
{
sum2+=int(t[i]-'0');
}
for(int i = 0;i < n;i++)
{
if(t[i]!='4'&&t[i]!='7')
flag = 1;
}
if(sum1==sum2&&!flag)
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}B-Lucky Mask
题意:给你两个数a和b,并且b是幸运数(定义见上一题),求一个最小的、比a大的数字c,让c的掩码等于b(掩码:数字中舍弃掉除了4和7的其他数字,剩下的由4和7组成的数字);
思路:从a+1开始,一个一个数字进行判断,如果掩码等于b那就输出(不会超市,因为两个相邻的数字差不超过67)
#include<bits/stdc++.h>
using namespace std;
string fun(int a)
{
string t;
while(a)
{
if(a%10==4||a%10==7)
{
t+=a%10+'0';
}
a/=10;
}
reverse(t.begin(),t.end());
return t;
}
int main(){
int a;
string b;
cin>>a>>b;
int sum = a+1;
while(fun(sum)!= b)
{
sum++;
}
cout<<sum<<endl;
}C-Lucky Conversion
题意:给你两个幸运数字(定义见A题)a和b,你可以进行两个操作:①将7替换成4或者将4替换成7;②交换b中的两个数字
求将a变成b的最小步数。
思路:求出a、b两个数字对应位置不同的数量,并且记录a的个数,输出a中4和7中数量多的那个数字。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
int a4n = 0,b4n = 0,a7n = 0,b7n = 0;
for(int i = 0;i < a.length();i++)
{
if(a[i]!=b[i])
if(a[i]=='4')
a4n++;
else if(a[i]=='7')
a7n++;
}cout<<max(a7n,a4n)<<endl;
}

京公网安备 11010502036488号