复杂三角形
输入一个大写字母(A - Z)或者一个数字(1 - 9)
输入是F的时候,输出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
输入是3的时候,输出:
1
121
12321
//解题思路:逐行进行遍历,先输出空格,在输出字符,大写字母和数字都当成一个char字符进行输入
//每一行按照字符的先升序打印后降序打印
#include<iostream>
using namespace std;
int main() {
char c;
cin >> c;
if (c >= 'A' && c <= 'Z') {
for (int i = 1; i <= c - 'A' + 1; i++) {
for (int j = 1; j <= c - 'A' + 1 - i; j++ ) {
cout << ' '; //每行的空格数为总行数 - 行号i
}
//分成两部分输出字母,先升序输出,后降序输出
for (int j = 1; j <= i; j++) {
cout << (char)('A' + j - 1);
}
for (int j = i - 1; j >= 1; j--) {
cout << (char)('A' + j -1);
}
cout << endl;
}
}
//数字同理
else {
for (int i = 1; i <= c - '1' + 1; i++) {
for (int j = 1; j <= c - '1' + 1 - i; j++ ) {
cout << ' '; //每行的空格数为总行数 - 行号i
}
//分成两部分输出数字,先升序输出,后降序输出
for (int j = 1; j <= i; j++) {
cout << (char)('1' + j - 1);
}
for (int j = i - 1; j >= 1; j--) {
cout << (char)('1' + j -1);
}
cout << endl;
}
}
return 0;
}
建房子
在土地上有很多宝藏,实现在土地上建一栋房子从而把宝藏包围起来,假设地图是一个n行m列的方格地图, 地图每个*代表一个宝藏,比如2行2列的地图如下:
**
**
对应要建的房子如下:
+-+-+
| *| * |
+-+-+
| * | * |
+-+-+
输入n,m,求要建的房子样式
//解题思路:输入n,m,则对应的行数为2*n+1,对应的列数为2*m+1,我的解题方法是交替输出不同的字符'+','-','|','*',当然也可以将前两行当成一个整体,最后在输出第一行的办法,两种办法都可以,思路清晰即可。
#include<iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= 2 * n + 1; i++) {
for (int j = 1; j <= 2 * m + 1; j++) {
if (i % 2 == 1) {
if (j % 2 == 1)
cout << '+';
else
cout << '-';
} else {
if (j % 2 == 1)
cout << '|';
else
cout << '*';
}
}
cout << endl;
}
return 0;
}
对称字符串
A1:A
A2:ABA
A3:ABACABA
A4:ABACABADABACABA
...
对于给定的N,根据规律输出AN
//解题思路:用了c语言中的strcat字符串拼接函数和strlen()获取字符串的长度
//char *strcat(char *dest, char *source)
//将source 拼接到dest后面,注意dest必须有足够的空间
#include<stdio.h>
#include<string.h>
int main() {
int n;
scanf("%d", &n);
char c[50000];
int len=0,i;
for(i = 1; i <= n; i++) {
strcat(c + len + 1,c) ; //此处的 +1是把每一次新增加的字符空间留出来
c[len] = 'A' + i - 1;
len = strlen(c);
printf("%s\n",c);
}
return 0;
}
重复字符串
查找重复的字符串
例如
输入:
i miss you
you
输出:
1
输入:
ossosso
osso
输出:
2
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int main() {
char str1[1004];
char str2[1004];
fgets (str1, 1004, stdin);
fgets (str2, 1004, stdin);
int len1 = strlen(str1) - 1;
int len2 = strlen(str2) - 1;
int ans = 0;
for (int i = 0; i + len2 - 1 < len1; i++) {
bool matched = true;
for (int j = 0; j < len2; j++){
if (str1[i + j] !=str2[j]){
matched = false;
break;
}
}
if (matched == true)
ans++;
}
printf("%d\n", ans);
return 0;
}