poj 1350 Cabric Number Problem

本文详细解析了一个关于四位数字的游戏算法实现过程,该算法通过不断调整数字顺序来寻找特定数值。文章强调了输入验证的重要性,并提供了完整的C++代码示例,展示了如何避免常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//这一题的陷阱多多,贡献了2次OLE,一次WA!哎!陷阱:需要保证输入的数必须为4位,不能大于或小于4位,要不就OLE! 输出的是No,Ok而不是no ,ok 
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;

bool cmp(char a, char b)
{
     return a > b;
}

int main()
{
    int n, c, temp1, temp2, ans;
    string str, str1, str2;
    bool flag, flag1, flag2;
    while (cin >> n && n != -1)
    {
          cout << "N=" << n << ":" << endl;
          c = 0;
          flag = flag1 = flag2 = false;
          while (1)
          {
              stringstream stream;
              stream << n;
              stream >> str;
              if (!flag2)//对输入的数判断是否为4位数,第二次就可以跳过,不用再判断! 
              {
                  flag2 = true;
                  if (str.length() != 4)
                  {
                      flag = true;
                      break;
                  }
              }
              str1 = str2 = str;
              sort(str1.begin(), str1.end());
              sort(str2.begin(), str2.end(), cmp);
              if (!flag1)
              {
                  if (str1 == str2) 
                  {
                      flag = true;
                      break;
                  }
              }
              stringstream stream1;
              stream1 << str1;
              stream1 >> temp1;
              stringstream stream2;
              stream2 << str2;
              stream2 >> temp2;
              ans = temp2 - temp1;
              c++;
              flag1 = true;
              cout << temp2 << "-" << temp1 << "=" << ans << endl;
              if (ans == 6174 || ans == 0) break;
              else n = ans;
          }
          if (flag)
             cout << "No!!" << endl;
          else
             cout << "Ok!! " << c << " times" << endl;
    }
    
    system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值