PAT 1116 多二了一点 15分

197 阅读1分钟

1116 多二了一点 - PAT (Basic Level) Practice (中文) (pintia.cn)

#include <iostream>
#include <string>
#include<cctype>
using namespace std;

int main() {
    string s;
    cin >> s;
    int len = s.size();

    // 判断是否是偶数位
    if (len % 2 == 1)
        cout << "Error: " << len << " digit(s)"<<endl;
    else {
        string A = s.substr(0, len / 2);
        string B = s.substr(len / 2, len / 2);

        int intA = stoi(A);
        int intB = stoi(B);

        if (intB - intA == 2) {
            cout << "Yes: " << B << " - " << A << " = " << 2<<endl;
        } else {
            cout << "No: " << B << " - " << A << " != " << 2<<endl;
        }
    }

    return 0;
}

image.png

原因在于用stoi()转了: stoi()转整数会去掉前导0,因此可能会出现这种情况:32-432.

并且我们还要确保除了最后一位外,A,B其他位都是相同的,这样才能确保B-A是2,我们可以用一个flag来做标记


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

int main() {
    string s;
    cin >> s;
    int flag=0;
    int len = s.size();

    // 判断是否是偶数位
   
if(s.size()&1) printf("Error: %d digit(s)",s.size());
    else {
        string A = s.substr(0, len / 2);
        string B = s.substr(len / 2, len / 2);

    int intA=A[A.size()-1]-'0';
    int intB=B[B.size()-1]-'0';

        for(int i=0;i<A.size()-1;i++)
        {
            if(A[i]!=B[i])
                flag=1;
        }
        
        if (intB - intA == 2&&!flag) {
            cout << "Yes: " << B << " - " << A << " = " << 2<<endl;
        } else {
            cout << "No: " << B << " - " << A << " != " << 2<<endl;
        }
    }

    return 0;
}

image.png

第二种方法

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

int main()
{
	string s; cin >> s;
     
	int l=0, r=0;
	if (s.size() % 2 == 1)printf("Error: %d digit(s)\n",s.size());
    else
    {
        	for (int i = 0; i < s.size(); i++)
	{
		if (i < s.size() / 2)
		{
			l += s[i]-'0';   
		}
		else r += s[i]-'0';  
	}

	if (l + 2 == r)cout << "Yes: " <<   s.substr(s.size() / 2) << " - " <<s.substr(0, s.size() / 2)<< " = " <<"2"<< endl;
	else cout << "No: " <<s.substr(s.size() / 2) << " - " <<  s.substr(0, s.size() / 2) << " != " <<"2"<< endl;
    }

	return 0;
}