本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
结尾无空行
输出样例:
*****
***
*
***
*****
2
结尾无空行
思路
本题建议画图,通过一个变量找函数关系。
我使用了i表示总共需要的函数/2,j表示中间计数,k输出空格的序号,y表示输出符号的序号
1.先计算上半部分(含中间的一个符号)需要几行,用i表示。总共需要几个符号,用n表示。
while(n<=N-1)
{
n+=(2*i-1)*2;
i++;
}
i--;
n-=(2*i-1)*2;
n++;
2.分段数列
少于7个“*”,输出一个“**”
多于7个,使用函数计算空格和符号的个数
if(N<7) cout<<ch;
else
{
i-=1;
int k;
int y;
int j;
for(j=i;j>=1;j--)//外层循环表示一半符号的个数
{
for(k=i-j;k>0;k--)
cout<<" ";//空格个数与j相加固定
for(y=j*2-1;y>0;y--)
cout<<ch;
if(j>=1)
cout<<endl;
}
//下半部分
j++;
//cout<<"j="<
for(;j<i;j++)
{
for(k=i-j;k>1;k--)
cout<<" ";
for(y=j*2+1;y>0;y--)
cout<<ch;
if(j<i-1)
cout<<endl;
}
}
3.输出空行和剩余个数。
总结:认真读题,提取重点,多角度观察与解决问题。
答案:
#include
using namespace std;
int main()
{
//输出的*小于N
int i=2,N,n=0;
char ch;//本例除了数字,还需要输入符号!
cin>>N;
cin>>ch;
while(n<=N-1)
{
n+=(2*i-1)*2;
i++;
}
i--;
n-=(2*i-1)*2;
n++;
if(N<7) cout<<ch;
else
{
i-=1;
int k;
int y;
int j;
for(j=i;j>=1;j--)//外层循环表示一半符号的个数
{
for(k=i-j;k>0;k--)
cout<<" ";//空格个数与j相加固定
for(y=j*2-1;y>0;y--)
cout<<ch;
if(j>=1)
cout<<endl;
}
//下半部分
j++;
//cout<<"j="<
for(;j<i;j++)
{
for(k=i-j;k>1;k--)
cout<<" ";
for(y=j*2+1;y>0;y--)
cout<<ch;
if(j<i-1)
cout<<endl;
}
}
cout<<endl<<N-n;
return 0;
}
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
结尾无空行
输出样例:
4
结尾无空行
//找到所有素数,相邻且差为2的素数对
#include
#include
using namespace std;
bool sushu(int num);
int main()
{
int N;
cin>>N;//找到不超过N的满足猜想的素数对的个数。
int i;
int count=0;
for(i=2;i<N;i++)
{
bool is_sushu=sushu(i);//判断素数
bool is_sushu_2=sushu(i+2);//判断素数
if(is_sushu && is_sushu_2) count++;
}
cout<<count;
}
bool sushu(int num)
{
int i=0;
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0) {return false;}
}
if(i>=sqrt(num))
//cout<
return true;
}
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
结尾无空行
答案:
#include
using namespace std;
int main()
{
int a[10000];
int N,xuhao,newxu;
int i=0,j=0,k=0;
cin>>N>>xuhao;
for(i=0;i<N;i++)
{
cin>>a[i];
}
newxu=N-xuhao;
if(newxu<0)
{
newxu=xuhao-N;
newxu=N-newxu;
}
for(j=newxu;j<N;j++)
{
cout<<a[j];
if(j<N-1) cout<<" ";
}
if(newxu%N!=0) cout<<" ";
for(k=0;k<newxu;k++)
{
cout<<a[k];
if(k<newxu-1) cout<<" ";
}
}