思路:建立一个二维数组储存n行的杨辉三角,然后遍历第n行即可
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n ;
while(cin >> n)
{
vector <vector<int>> arr(n);
for (int i = 0; i < n; i++)
{
arr[i].resize(2 * n + 2);
arr[i][1] = 1;
arr[i][2 * i +1] = 1;
}
for (int i = 1; i < n; i++)
{
for (int j = 2; j < 2 * n + 2; j++)
{
arr[i][j] = arr[i-1][j] + arr[i-1][j - 1] + arr[i-1][j - 2];
}
}
for(int i = 1; i < n; i++)
{
if (arr[n - 1][i] % 2 == 0)
{
cout << i << endl;
break;
}
}
}
return 0;
}
思路:新建一个字符串储存和,然后依次遍历俩个加数的尾部,然后将和插入新建字符串里的头部,然后在相加是靠徐一下进位即可;
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1, str2;
while(cin >> str1 >> str2)
{
string sum;
int flag = 0;
while (!str1.empty() || !str2.empty())
{
int a = 0;
int b = 0;
if (str1.size() > 0)
a = str1.back() - '0';
if (str2.size() > 0)
b = str2.back() - '0';
char c = ((a + b + flag) % 10 + '0');
sum.insert(sum.begin(), c);
flag = (a + b + flag) / 10;
if (str1.size() > 0)
str1.pop_back();
if (str2.size() > 0)
str2.pop_back();
}
if (flag != 0)
{
sum.push_back('1');
}
cout << sum.c_str() << endl;
}
return 0;
}