团体程序设计天梯赛20分题目题解合集里有哪些长尾词技巧?

2026-04-15 05:4811阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2369个文字,预计阅读时间需要10分钟。

团体程序设计天梯赛20分题目题解合集里有哪些长尾词技巧?

题目:编写程序,找出给定正整数N的所有连续因子的组合。

要求:

1.输入:一个正整数N。

2.输出:所有可能的连续因子组合,格式为因子1因子2...因子N。

3.限制:结果不超过100个字符。

示例:

输入:630输出:375767

输入:N输出:所有可能的连续因子组合

1、L1-006 连续因子

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

输入格式: 输入在一行中给出一个正整数 N(1<N<2 ^31 )。

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

630 3 5*6*7

#include<iostream> using namespace std; #include<vector> #include<cmath> int main() { int n; cin>>n; vector<int> res; int temp; for(int i=2;i<=sqrt(n);i++)//一个数的因子除了本身之外,其他一定<=sqrt(n) { temp=1; vector<int> v; for(int j=i;temp<=n;j++) { temp=temp*j; if(n%temp==0) { v.push_back(j); if(v.size()>res.size()) { //将区间[first,last)的元素赋值到当前的vector容器中,会覆盖之前的内容 res.assign(v.begin(),v.end()); } }else { break; } } } if(res.size()==0)//说明是素数,只有1和本身两个因子 { cout<<1<<"\n"<<n<<endl; }else { cout<<res.size()<<endl; for(int i=0;i<res.size();i++) { cout<<res[i]; if(i!=res.size()-1) { cout<<"*"; } } } return 0; }

2、L1-020 帅到没朋友

当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。

输入格式: 输入第一行给出一个正整数N(≤100),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K(≤1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(≤10000),为待查询的人数;随后一行中列出M个待查询的ID,以空格分隔。

注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有K超过1的朋友圈里都至少有2个不同的人。

输出格式: 按输入的顺序输出那些帅到没朋友的人。ID间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出No one is handsome。

注意:同一个人可以被查询多次,但只输出一次。

团体程序设计天梯赛20分题目题解合集里有哪些长尾词技巧?

3 3 11111 22222 55555 2 33333 44444 4 55555 66666 99999 77777 8 55555 44444 10000 88888 22222 11111 23333 88888 10000 88888 23333

3 3 11111 22222 55555 2 33333 44444 4 55555 66666 99999 77777 4 55555 44444 22222 11111 No one is handsome

#include<iostream> #include<set>//使用set容器,可以保证不重复 using namespace std; int main() { int n; cin>>n; set<int>no_handsome;//不帅的人 for(int i=0;i<n;i++) { int k; cin>>k; for(int j=0;j<k;j++) { int t; cin>>t; if(k>1)//朋友圈人数>1,说明里面的人一定不帅 { no_handsome.insert(t); } } } int m; cin>>m; set<int>handsome;//存储已经输出的帅的人 bool flag=true;//标记第一个输出 for(int i=0;i<m;i++) { int t; cin>>t; //find()返回的是一个迭代器指针,如果==end(),说明遍历完容器也没有找到该元素 if(no_handsome.find(t)==no_handsome.end())//该人帅 { if(handsome.find(t)==handsome.end())//该人没有输出过 { if(!flag) { cout<<" "; } printf("%05d",t); flag=false; } handsome.insert(t);//输出过就加入 } } if(handsome.size()==0)//没有输出过 { cout<<"No one is handsome"; } return 0; }

3、L1-027 出租

一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。

本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。

输入格式: 输入在一行中给出一个由11位数字组成的手机号码。

输出格式: 为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。

18013820100 int[] arr = new int[]{8,3,2,1,0}; int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};

#include<iostream> using namespace std; #include<set> #include<algorithm> #include<cstring> bool cmp(int a,int b) { return a>b; } int main() { char num[12]={0}; cin.getline(num,sizeof(num)); set<int>s; for(int i=0;num[i]!='\0';i++) { s.insert(num[i]-'0');//set容器去重 } int arr[s.size()]; int k=0; for(auto it=s.begin();it!=s.end();it++) { arr[k++]=*it; } int len=sizeof(arr)/sizeof(int); sort(arr,arr+len,cmp);//从大到小排序 cout<<"int[] arr = new int[]{"; for(int i=0;i<len;i++) { if(i!=len-1)//输出格式控制 { cout<<arr[i]<<","; }else { cout<<arr[i]; } } cout<<"};"<<endl; cout<<"int[] index = new int[]{"; for(int i=0;num[i]!='\0';i++) { for(int j=0;j<len;j++) { if((num[i]-'0')==arr[j]) { if(i!=(int)(strlen(num)-1)) { cout<<j<<","; }else { cout<<j; } } } } cout<<"};"; return 0; }

4、L1-032 Left-pad

根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是*****GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

输入格式: 输入在第一行给出一个正整数N(≤10 4 )和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。

输出格式: 在一行中输出结果字符串。

15 _ I love GPLT ____I love GPLT 4 * this is a sample for cut cut

#include<iostream> using namespace std; #include<string> int main() { int n; char c; cin>>n>>c; //scanf("%d %c",&n,&c); string s; getchar();//cin,scanf读取完后会留下'\n'换行符,用getchar()吸收掉 getline(cin,s);//才能下一步用getline int len=s.length(); if(len>=n) { string s1=s.substr(len-n,len); cout<<s1; }else{ for(int i=0;i<n-len;i++) { cout<<c; } cout<<s; } return 0; }

5、L1-034 点赞

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式: 输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为 ”,其中1≤K≤10,F (i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式: 统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

4 3 889 233 2 5 100 3 233 2 73 4 3 73 889 2 2 233 123 233 3

#include<iostream> using namespace std; #include<algorithm> int main() { int n; cin>>n; int nums[10005]={0};//要赋初值为0,后面有++操作 int flag=0;//标记出现次数最多的标签 for(int i=0;i<n;i++) { int k; cin>>k; for(int j=0;j<k;j++) { int num; cin>>num; nums[num]++; //核心是次数大优先,次数一样则下标大优先 if(nums[num]>nums[flag]) { flag=num; }else if(nums[num]==nums[flag]) { if(num>flag) { flag=num; } } } } cout<<flag<<" "<<nums[flag]; return 0; }

本文共计2369个文字,预计阅读时间需要10分钟。

团体程序设计天梯赛20分题目题解合集里有哪些长尾词技巧?

题目:编写程序,找出给定正整数N的所有连续因子的组合。

要求:

1.输入:一个正整数N。

2.输出:所有可能的连续因子组合,格式为因子1因子2...因子N。

3.限制:结果不超过100个字符。

示例:

输入:630输出:375767

输入:N输出:所有可能的连续因子组合

1、L1-006 连续因子

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

输入格式: 输入在一行中给出一个正整数 N(1<N<2 ^31 )。

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

630 3 5*6*7

#include<iostream> using namespace std; #include<vector> #include<cmath> int main() { int n; cin>>n; vector<int> res; int temp; for(int i=2;i<=sqrt(n);i++)//一个数的因子除了本身之外,其他一定<=sqrt(n) { temp=1; vector<int> v; for(int j=i;temp<=n;j++) { temp=temp*j; if(n%temp==0) { v.push_back(j); if(v.size()>res.size()) { //将区间[first,last)的元素赋值到当前的vector容器中,会覆盖之前的内容 res.assign(v.begin(),v.end()); } }else { break; } } } if(res.size()==0)//说明是素数,只有1和本身两个因子 { cout<<1<<"\n"<<n<<endl; }else { cout<<res.size()<<endl; for(int i=0;i<res.size();i++) { cout<<res[i]; if(i!=res.size()-1) { cout<<"*"; } } } return 0; }

2、L1-020 帅到没朋友

当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。

输入格式: 输入第一行给出一个正整数N(≤100),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K(≤1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(≤10000),为待查询的人数;随后一行中列出M个待查询的ID,以空格分隔。

注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有K超过1的朋友圈里都至少有2个不同的人。

输出格式: 按输入的顺序输出那些帅到没朋友的人。ID间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出No one is handsome。

注意:同一个人可以被查询多次,但只输出一次。

团体程序设计天梯赛20分题目题解合集里有哪些长尾词技巧?

3 3 11111 22222 55555 2 33333 44444 4 55555 66666 99999 77777 8 55555 44444 10000 88888 22222 11111 23333 88888 10000 88888 23333

3 3 11111 22222 55555 2 33333 44444 4 55555 66666 99999 77777 4 55555 44444 22222 11111 No one is handsome

#include<iostream> #include<set>//使用set容器,可以保证不重复 using namespace std; int main() { int n; cin>>n; set<int>no_handsome;//不帅的人 for(int i=0;i<n;i++) { int k; cin>>k; for(int j=0;j<k;j++) { int t; cin>>t; if(k>1)//朋友圈人数>1,说明里面的人一定不帅 { no_handsome.insert(t); } } } int m; cin>>m; set<int>handsome;//存储已经输出的帅的人 bool flag=true;//标记第一个输出 for(int i=0;i<m;i++) { int t; cin>>t; //find()返回的是一个迭代器指针,如果==end(),说明遍历完容器也没有找到该元素 if(no_handsome.find(t)==no_handsome.end())//该人帅 { if(handsome.find(t)==handsome.end())//该人没有输出过 { if(!flag) { cout<<" "; } printf("%05d",t); flag=false; } handsome.insert(t);//输出过就加入 } } if(handsome.size()==0)//没有输出过 { cout<<"No one is handsome"; } return 0; }

3、L1-027 出租

一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。

本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。

输入格式: 输入在一行中给出一个由11位数字组成的手机号码。

输出格式: 为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。

18013820100 int[] arr = new int[]{8,3,2,1,0}; int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};

#include<iostream> using namespace std; #include<set> #include<algorithm> #include<cstring> bool cmp(int a,int b) { return a>b; } int main() { char num[12]={0}; cin.getline(num,sizeof(num)); set<int>s; for(int i=0;num[i]!='\0';i++) { s.insert(num[i]-'0');//set容器去重 } int arr[s.size()]; int k=0; for(auto it=s.begin();it!=s.end();it++) { arr[k++]=*it; } int len=sizeof(arr)/sizeof(int); sort(arr,arr+len,cmp);//从大到小排序 cout<<"int[] arr = new int[]{"; for(int i=0;i<len;i++) { if(i!=len-1)//输出格式控制 { cout<<arr[i]<<","; }else { cout<<arr[i]; } } cout<<"};"<<endl; cout<<"int[] index = new int[]{"; for(int i=0;num[i]!='\0';i++) { for(int j=0;j<len;j++) { if((num[i]-'0')==arr[j]) { if(i!=(int)(strlen(num)-1)) { cout<<j<<","; }else { cout<<j; } } } } cout<<"};"; return 0; }

4、L1-032 Left-pad

根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是*****GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

输入格式: 输入在第一行给出一个正整数N(≤10 4 )和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。

输出格式: 在一行中输出结果字符串。

15 _ I love GPLT ____I love GPLT 4 * this is a sample for cut cut

#include<iostream> using namespace std; #include<string> int main() { int n; char c; cin>>n>>c; //scanf("%d %c",&n,&c); string s; getchar();//cin,scanf读取完后会留下'\n'换行符,用getchar()吸收掉 getline(cin,s);//才能下一步用getline int len=s.length(); if(len>=n) { string s1=s.substr(len-n,len); cout<<s1; }else{ for(int i=0;i<n-len;i++) { cout<<c; } cout<<s; } return 0; }

5、L1-034 点赞

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式: 输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为 ”,其中1≤K≤10,F (i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式: 统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

4 3 889 233 2 5 100 3 233 2 73 4 3 73 889 2 2 233 123 233 3

#include<iostream> using namespace std; #include<algorithm> int main() { int n; cin>>n; int nums[10005]={0};//要赋初值为0,后面有++操作 int flag=0;//标记出现次数最多的标签 for(int i=0;i<n;i++) { int k; cin>>k; for(int j=0;j<k;j++) { int num; cin>>num; nums[num]++; //核心是次数大优先,次数一样则下标大优先 if(nums[num]>nums[flag]) { flag=num; }else if(nums[num]==nums[flag]) { if(num>flag) { flag=num; } } } } cout<<flag<<" "<<nums[flag]; return 0; }