目录
一、多项式输出


答案如下:
cpp
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n; cin >> n;
for(int i = n; i >= 0; i--)
{
int a; cin>>a;
if(a == 0) continue;
//符号
if(a < 0)
{
cout << '-';
}
else{
if(i != n)
{
cout << '+';
}
}
//数字
a = abs(a);
if(a != 1 || (a == 1 && i == 0))
{
cout << a;
}
//次幂
if(i == 1)
{
cout<<'x';
}
else if (i > 1)
{
cout << "x^" << i;
}
}
return 0;
}
二、蛇形方阵

答案如下:
cpp
#include<iostream>
using namespace std;
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
const int N = 15;
int arr[N][N];
int main()
{
int n; cin >> n;
int x = 1, y = 1;
int pos = 0;
int cnt = 1;
while(cnt <= n*n)
{
arr[x][y] = cnt;
int a = x + dx[pos];
int b = y + dy[pos];
if(a<1 || a>n || b<1 || b>n || arr[a][b])
{
pos = (pos+1)%4;
a = x + dx[pos];
b = y + dy[pos];
}
x = a; y = b;
cnt++;
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
printf("%3d",arr[i][j]);
}
cout << endl;
}
return 0;
}
三、字符串展开


答案如下:
cpp
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int p1,p2,p3;
string s;
int n;
string ret;
bool IsDigit(char ch)
{
return ch >= '0' && ch <= '9';
}
bool IsLeter(char ch)
{
return ch >= 'a' && ch <= 'z';
}
void add(char left, char right)
{
string str;
for(char ch = left + 1; ch < right; ch++)
{
char tmp = ch;
//处理p1
if(p1 == 2 && IsLeter(ch))
{
tmp -= 32;
}
else if(p1 == 3)
{
tmp = '*';
}
//处理p2
for(int i = 1; i <= p2; i++)
{
str += tmp;
}
}
//处理p3
if(p3 == 2)
{
reverse(str.begin(), str.end());
}
ret += str;
}
int main()
{
cin>>p1>>p2>>p3>>s;
n = s.size();
for(int i = 0; i < n; i++)
{
char ch = s[i];
if(ch != '-' || i == 0 || i == n-1)
{
ret += ch;
}
else{
char left = s[i-1];
char right = s[i+1];
if((IsDigit(left) && IsDigit(right) && left < right)
|| (IsLeter(left) && IsLeter(right) && left < right))
{
//展开
add(left ,right);
}
else{
ret += ch;
}
}
}
cout << ret << endl;
return 0;
}