首页 > 其他 > 详细

QFNU-ACM 2020.10.30 Trating+2020.11.01天梯赛练习*4

时间:2020-11-08 23:35:08      阅读:38      评论:0      收藏:0      [点我收藏+]

E:

题意:给n,处理 n-1 次。每一次处理要把上次的处理的结果添加到这一次的末尾,再在整个序列的中间插入一个之前没有出现过的正整数,问处理 n-1 次后,第 k 个位置的数字是什么。

题解:由题意可知

n=1时  1

n=2时  1 2 1

n=3时  1 2 1 3 1 2 1

n=4时  1 2 1 3 1 2 1 4 1 2 1 3 1 2 1

n=5时  1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1

   . . . . . . . . . . . . . . . . . . . . . . . .

*******************************************************************************

由上面可以看出

1的位置为 1 3 5 7 9 . . . . .       即20*(2m+1)

2的位置为 2 6 10 14 18 . . . . .    即21*(2m+1)

3的位置为 4 12 20 28 . . . . . .     即22*(2m+1)

  . . . . . . . . . . . . . . . . . . . . . . . . .

*********************************************************************************

由此可知k的质因数中有几个2,那这个位置上的数就是2的个数+1

技术分享图片
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
    ll n,k;
    cin>>n>>k;
    ll sum=0;
    while(1){
        if(k%2==0){
            sum++;
            k=k/2;
        }else{
            break;
        }
    }
    cout<<sum+1<<endl;
    return 0;
} 
View Code

F

题意:给n,求满足2/n = 1/x + 1/y + 1/z的三个数

题解:n=1时无解其他情况x=n,y=n+1,则z=n*(n+1)

技术分享图片
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
    ll n,k;
    cin>>n>>k;
    ll sum=0;
    while(1){
        if(k%2==0){
            sum++;
            k=k/2;
        }else{
            break;
        }
    }
    cout<<sum+1<<endl;
    return 0;
} 
View Code

 

7-6 连续因子 

题意:一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数 N(1)。

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

题解:从2到sqrt(n)枚举,对每个枚举的因子判断它的连续因子的长度,并记录第一个因子。最后按照记录的第一个因子和长度输出

技术分享图片
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
int main(){
    ll m,n,flag;
    cin>>n;
    m=n;
    ll sum=0,maxx=0;
    for(ll i=2;i*i<=n;i++){
          sum=0;
          m=n;
          ll j=i;
          while(m%j==0){
               m=m/j;
               j++;
               sum++;
          }
          if(sum>maxx){
              maxx=sum;
              flag=i;
          }
    }
    if(maxx==0){
        cout<<1<<endl;
        cout<<n<<endl;
    }else{
        cout<<maxx<<endl;
        for(int i=1;i<=maxx;i++){
            if(i!=maxx){
                cout<<flag++<<"*";
            }else{
                cout<<flag++<<endl;
            }
        }
    }
    return 0;
} 
View Code

7-5 古风排版 

题意:中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

输入在第一行给出一个正整数N(<),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

题解:第一列要初始化为空格,其他按要求赋给二维字符数组

技术分享图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
    int n,k=0,t=0;
    cin>>n;
    getchar();
    string s;
    char a[100][10010];
    getline(cin,s);
    if(s.length()%n!=0){
        t=s.length()/n+1;
    }else{
        t=s.length()/n;
    }
    for(int i=0;i<n;i++){
        a[i][0]= ;
    }
    for(int i=t-1;i>=0;i--){
        for(int j=0;j<n;j++){
            a[j][i]=s[k++];
            if(k==s.length()) break;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<t;j++){
            cout<<a[i][j];
        }
        cout<<endl;
    }
    return 0;
} 
View Code

 

QFNU-ACM 2020.10.30 Trating+2020.11.01天梯赛练习*4

原文:https://www.cnblogs.com/yy0826/p/13946090.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!