problem A 矩阵输出
问题描述:
输出一个n行m列的矩阵,要求边上的点是“#”,其他点是"*"。
关于输入:
第一行是一个整数T(T<=20),T是输入的组数;
每行两个数字n,m,n,m<=5。
输入样例:
3
1 1
2 2
3 3
样例输出:
#
##
##
###
#*#
###
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int x,y;
for(int i=0;i<n;i++) {
cin>>x>>y;
for(int j=0;j<x;j++){
for(int w=0;w<y;w++)
if(w==0||j==x-1) cout<<"#";
else if(j==0&&w!=y-1) cout<<"#";
else if(j==0&&w==y-1) cout<<"#"<<endl;
else if(w==y-1) cout<<"#"<<endl;
else cout<<"*";
}
cout<<endl;}
return 0;
}
problem B 蝶形变换
问题描述:
处理音频信号是经常用到傅里叶变换将时域波形转变为频域波形,而FFT是快速计算这一变换的一个方法。基2时域抽选法是一个时间FFT的方法,通过按数字下标的奇偶分组,可以获得蝶形变换的初试序列。请模拟这个过程。
关于输入:
第一行表示输入的组数T,每组的第一行是一个整数k(1<=k<=12),表示数列长度为2^k。然后接着一行是待分组的数列,元素的大小范围为[0,10000].
关于输出:
分组后输出。
样例输入:
1
3
1 3 5 7 11 13 17 19
样例输出:
1 11 5 17 3 13 7 19
提示:
比如数列长度为8,奇偶分组如下:
初始:0 1 2 3 4 5 6 7
第一次分组:0 2 4 6 1 3 5 7
然后接着分别对分开的两组再进行奇偶分组,再得到:
0 4 2 6 1 5 3 7
再分组是数列不再变化,这就是进行基2时域抽选法的初试序列。
#include<iostream> #include<stdio.h> using namespace std; int main()//代码错 { int n,x; cin>>n; int a; for(int i=0;i<n;i++){ cin>>x;//多少数 a=1; for(int j=0;j<x;j++){ a=a*2; } int shu[a-1]; for(int w=0;w<a;w++){ cin>>x; shu[w]=x; } int b=a/2; int s1[b-1],s2[b-1];int r=1,t=1; for(int w=0;w<a;w++){ if(w%2==0) { s1[r]==shu[w];r++;} else if(w%2!=0){ s2[t]==shu[w];t++;} } int s3[b/2],s4[b/2]; int p=1,o=1; for(int w=0;w<r;w++){ if(w%2==0) { s3[p]==s1[w];p++;} else { s4[o]==s1[w];o++;} } int pp=0; for(int w=0;w<p;w++){ shu[w]==s3[pp];pp++; } pp=0; for(int w=p;w<p*2;w++){ shu[w]==s4[pp];pp++; } p=o=0; for(int w=0;w<r;w++){ if(w%2==0) { s3[p]==s2[w];p++;} else { s4[o]==s2[w];o++;} } pp=0; for(int w=2*p;w<3*p;w++){ shu[w]==s3[pp];pp++; } pp=0; for(int w=p*3;w<p*4;w++){ shu[w]==s4[pp];pp++; } for(int w=0;w<a;w++){ cout<<shu[w]<<" "; } } return 0; }