目录
1.跟奥巴马一起编程
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
int col;
char c;
scanf("%d %c",&col,&c);
int row;
if(col%2==1) row=col/2+1;
else row=col/2;
row-=2;
for(int i=0;i<col;i++){
printf("%c",c);
}
printf("\n");
for(int i=0;i<row;i++){
printf("%c",c);
for(int j=0;j<col-2;j++){
printf(" ");
}
printf("%c",c);
printf("\n");
}
for(int i=0;i<col;i++){
printf("%c",c);
}
return 0;
}
2.打印沙漏
我首先找出最上面一层的数量,然后一步步找规律输出,最后只能拿到20分的16分
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int getvalue(int x){
for(int i=3;i<1000;i+=2){
x-=2*i;
if(x<0){
return i-2;
}
}
return -1;
}
int main(){
int n;
char c;
scanf("%d %c",&n,&c);
if(n==0) return 0;
else if(n==1) printf("*");
else{
int max_=getvalue(n-1);
if(max_==1){
printf("*\n");
printf("%d",n-1);
}else{
int gap=0,num=max_;
int count=0;
for(int i=max_;i>=1;i-=2){
for(int j=0;j<gap;j++){
printf(" ");
}
for(int j=0;j<i;j++){
count++;
printf("%c",c);
}
printf("\n");
gap+=1;
}
gap-=2;
for(int i=3;i<=num;i+=2){
for(int j=0;j<gap;j++){
printf(" ");
}
for(int j=0;j<i;j++){
count++;
printf("%c",c);
}
printf("\n");
gap-=1;
}
printf("%d",n-count);
}
}
return 0;
}
这种方法先通过数学方法算出来,更加科学
3.Hello World for U
strlen求数组长度大小
直接用数组存储最后的结果,输出数组即可
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
char str[100],martix[40][40];
scanf("%s",str);
int len=strlen(str);
int n1=(len+2)/3,n3=n1,n2=len+2-n1-n3;
for(int i=1;i<n1;i++){
for(int j=1;j<n2;j++){
martix[i][j] = ' ';
}
}
int pos=0;
for(int i=1;i<=n1;i++){
martix[i][1] = str[pos++];
}
for(int i=2;i<=n2;i++){
martix[n1][i] = str[pos++];
}
for(int i=n3-1;i>=1;i--){
martix[i][n2] = str[pos++];
}
for(int i=1;i<=n1;i++){
for(int j=1;j<=n2;j++){
printf("%c",martix[i][j]);
}
printf("\n");
}
return 0;
}