第一题 大致题意: 统计数字
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x;
cin>>n>>x;
int count=0;
for(int i=1;i<=n;i++)
{
int mid=i;
while(mid/10>0)
{
int midd=mid%10;
if(midd==x) count++;
mid/=10;
}
if(mid==x) count++;
}
cout<<count;
}
第二题: 填充矩阵
米字形由一个(2n-1)×(2n-1)的矩阵组成,矩阵包含从大写A开始的n个字母
例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。
矩阵的正中间为n个字母中字典序最大的那个,从这个字母开始,沿着西北、正北、东北、正西、正东、西南、正南、东南八个方向各有一条由大写字母组成的直线。并且直线上的字母按字典序依次减小,直到大写字母A。
矩阵的其它位置用英文句号.填充。
现在Keven给你一个正整数N,想要你帮他输出这个矩阵,你能帮助他吗?
输入格式:
输入在一行中给出1个不超过26的正整数N
输出格式:
输出(2n-1)×(2n-1)的矩阵
观察可以看出,每次都是从中间那个往外填充八个字符,所以手动写上八个方向就行。
PS:这个还稍微有点意思
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[60][60];
for(int i=0;i<60;i++)
for(int j=0;j<60;j++)
s[i][j]='.';
int n;
cin>>n;
char x='A'+n-1;
// cout<<x;
int pos1=n-1,pos2=n-1;
s[pos1][pos2]=x;
for(int i=1;i<n;i++)
{
s[pos1-i][pos2]=x-i;
s[pos1+i][pos2]=x-i;
s[pos1][pos2-i]=x-i;
s[pos1][pos2+i]=x-i;
s[pos1-i][pos2-i]=x-i;
s[pos1-i][pos2+i]=x-i;
s[pos1+i][pos2-i]=x-i;
s[pos1+i][pos2+i]=x-i;
}
for(int i=0;i<2*n-1;i++)
{
for(int j=0;j<2*n-1;j++)
cout<<s[i][j];
cout<<endl;
}
return 0;
}
第三题:
题目很简单,给定一个数,求该数分解素因子后,包含的不同的素因子个数,并输出这些素因子。素数:定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
输入格式:
输入一个整数n(0 <= n <= 3e9)
输出格式:
输出一个整数k,代表k个不同的素数个数 接下来一行输出k个不同的素因子。
这个题我用暴力竟然卡常数卡过了!!!人生第一次写代码这么幸运!!!
附上很挫的代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e6+5;
long long a[maxn];
int main()
{
long long n;
cin>>n;
if(n==0)
{
cout<<"0";
return 0;
}
int num=2;
int pos=0;
if(n%2==0)
{
a[pos]=2;
pos++;
}
while(n%2==0)
{
n/=2;
}
num=3;
while(n>2)
{
if(n<num) break;
if(n%num==0)
{
a[pos]=num;
pos++;
}
while(n%num==0)
{
n/=num;
}
num+=2;
}
cout<<pos;
if(pos!=0)
{
cout<<endl;
for(int i=0;i<pos;i++)
{
if(i!=0) cout<<" ";
cout<<a[i];
}
}
return 0;
}
就这样吧,够了三十分了,后面的题也没意思。