蛇形填数
输入一个整数n,按照蛇形填写n*n的矩阵
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
解题关键是判断临界拐点
注意判断下一个点是否已被填充,若无此,仅能实现一轮上下左右
向右
没到达最右边且下一个位置没被填充
向下
没到达最下边且下一个位置没被填充
向左
没到达最左边且下一个位置没被填充
向上
没到达最上边且下一个位置没被填充
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int main() {
int n, x, y, count;
cin >> n;
int** a = new int* [n];
for (int i = 0;i < n;i++) {
a[i] = new int[n];
memset(a[i], 0, n*sizeof(int));
}
for (int i = 0;i < n;i++) {
for (int j = 0;j < n;j++)
cout << setw(5) << a[i][j];
}
cout << endl;
x = y = 0;
count = a[0][0] = 1;
while (count < n * n) {
while (y + 1 < n && !a[x][y + 1]) //向右
a[x][++y] = ++count;
while (x + 1 < n && !a[x + 1][y]) //向下
a[++x][y] = ++count;
while (y - 1 >= 0 && !a[x][y - 1]) //向左
a[x][--y] = ++count;
while (x - 1 >= 0 && !a[x - 1][y]) //向上
a[--x][y] = ++count;
}
for (int i = 0;i < n;i++) {
for (int j = 0;j < n;j++)
cout << setw(5) << a[i][j];
cout << endl;
}
for (int i = 0;i < n;i++)
delete[] a[i];
delete[] a;
return 0;
}
字符串统计
先将非字母字符转换为空字符
当前字符不为空时,其后紧接空字符则计数+1
#include<iostream>
#include<string>
using namespace std;
char s1[1000];
int count(string s) {
int num = 0;
for (int i = 0;i < s.length();i++) {
if (s[i] < 'A' || s[i]>'Z' && s[i] < 'a' || s[i]>'z')
s[i] = ' ';
}
for(int i =0;i<s.length();i++){
if (s[i] != ' ' && s[i + 1] == ' ')
num++;
}
return num;
}
int main() {
string s;
//gets_s(s1);
getline(cin, s);
cout << count(s) << endl;
}