“蓝桥杯”模拟法(四)——杨辉三角、猴子选大王

梁老师
梁老师 北京小升初老师~

0 人点赞了该文章 · 69 浏览





1. 杨辉三 角(2021年试题H) (答案见下期)

【问题描述】
下图是著名的杨辉三角  。

图片

如果按从上到下、从左到右的顺序把所有数排成一列,则可以得到如下数列:1,1,1,1,2,1,3,3,1,1,4,6,4,1,1,5,10,10,5,1…… 给定一个正整数N,请你输出数列中N第一次出现是在第几个数的位置?
[输入格式]
输入一个整数N。
[输出格式]
输出一个整数,代表答案。
[样例输 入]
6
[样例输出]
13
[样例输 入]
2
[样例输出]
5

练习2:猴子选大王

【题目描述】
有n只猴子按顺时针方向围成一圈选猴王(编号从 1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外。剩下的猴子再接着从1开始报数,,就这样,直到圈内只剩下一只猴子时,这只猴子就是猴王。编程输入n和m,输出猴王的编号。
[输入格式]
每行是用空格分开的两个整数。第一个是n,第二个是m(0<m,n<300)。最后一行是00。
[输出格式]
对于每行输入数据(最后行除外) 输出数据也是 一行,即猴王的编号。
[输入样例]
6   2
12  4
8   3 0   0
[输出样例]
5
1
7

3.上期答案——整数拼接

三位同学写得都很好,思路是一样的,先计算出每个整数的位数。
如果n1的位数是len1,n2的位数是len2
N1拼接n2是:n1×10len2+n2;
N2 拼接n1是:n2×
10len1+n1;

书写代码略有不同,同学们参考,希望能给你启发。
【参考程序一】——申茂生答案

#include <iostream>  
using namespace std;
int kkk(int a,int b,int k)//一个判断函数,判断a拼接上b是否为k的倍数 
{
 unsigned long long c;
 for(int i=1,j=1;j<10;i*=10,j++)
 {
  if(b>=i&&b<=i*10)//判断b是几位数 
  {
   c=a*i*10+b;//a拼接上b 
   if(c%k)
    return 0;
   else
    return 1;
  }
 }
}
int main()
{
 int n,k,sum=0;//sum记录有几种拼法 
 cin>>n>>k;
 int num[n];
 for(int i=0;i<n;i++)
 {
  cin>>num[i];
 }
 for(int i=0;i<n;i++)
 {
  for(int j=0;j<n;j++)
  {
   if(i!=j)//i不等于j 
    if(kkk(num[i],num[j],k))//判断a拼接上b是否为k的倍数 
     sum++;
  }
 }
 cout<<sum;//输出有几种拼法 
}

【参考程序二】——冯老师答案

#include <iostream>
#include <math.h>
using namespace std;
int digitNums(int n) //返回整数n的位数
{  int res=0;
   while(n)
   {
    res++;
    n=n/10;
 } 
  return res; 
 } 
int main()
{
 int n,k,counts=0;;
 cout<<"input n and k:"
 cin>>n>>k;
 int *a=new int[n];//n个整型数据
 cout<<"input "<< n <<" integers:"
 for(int i=0;i<n;i++) //输入n个整数 
  cin>>a[i] ;
 int ai,aj; 
 for(int i=0;i<n;i++)
 {   int ai=a[i];
  for(int j=0;j<n;j++)
   {
    if(j!=i) 
    {
     aj=a[j];
     int  ni=digitNums(ai),nj=digitNums(aj);
     //如果ai是123,ni=3;aj是45,nj=2 
     //ni和nj是ai和aj 数据的位数 
     unsigned long long  nn= ai*pow(10,nj)+aj; 
     //nn=123*100+45
     if(nn%k==0
      counts++; //计数器加1 
    }
     }
  } 
 cout<< counts<<endl;
 return 0;
}

【参考程序三】——吴炳毅答案

#include <iostream>
using namespace std;
int A(int a){
 int num=1;
 while(a/10)
 {
  num++;
  a=a/10;
 }
 return num;
}
int main() {
 int n,k;
 cin>>n>>k;
 unsigned long long ac[n],b=0;
 int num=0;
 for(int i=0;i<n;i++)
 {
  cin>>ac[i];/*存储数据*/ 
 }
int bc[n];
 for(int i=0;i<n;i++)
 {
  bc[i]=A(ac[i]);/*存储每个数的位数*/ 
 }
 for(int i=0;i<n;i++)
 {     
  for(int j=n-1;j>i;j--)
  {  
   b=ac[i];
   for(int k=0;k<bc[j];k++)b=b*10;
   b+=ac[j];
   if(b%k==0)num++;
   b=ac[j];
   for(int k=0;k<bc[i];k++)b=b*10;
   b+=ac[i];
   if(b%k==0)num++;
  }
 }
 cout<<num;
}

【参考程序四】——刘策答案

#include <iostream>
using namespace std;
typedef long long LL;
const int  N = 10010;
LL a[N];
LL judge(int x)
{
 LL len = 0, t = 1;
 while (x)
{
  x /= 10;
  len++;
 }
for (int i = 1; i <= len; i++) t *= 10;
 return t;
}
int main()
{
 int n, k;
 cin >> n >> k;
for (int i = 1; i <= n; i++) 
cin >> a[i];
 LL ans = 0;
 for (int i = 1; i <= n; i++)
  for (int j = i + 1; j <= n; j++)
  {
   LL p = judge(a[i]), q = judge(a[j]);
   LL x = a[i] * q + a[j];
   LL y = a[j] * p + a[i];
   if (x % k == 0) ans++;
   if (y % k == 0) ans++;
  }
cout << ans << endl;
return 0;
}

4.上期答案——卡片

【参考程序一】——申茂生

#include <iostream>
using namespace std;
int main()
{
 int num=0,f=0;
 int sum[10]={};//0到9的卡片 
 for(int i=0;i<10;i++)//每个卡片有2021张 
 sum[i]=4;
 while(true)
 {
  num++;
  int num1=num;
  while(num1)//判断是否能拼到num 
  {
   if(sum[num1%10]--)//若可以则对应卡片数量减一 
   {
   }
   else//若卡片数量为0则不能拼到num 
   {
    f=1;
    break;
   }
   num1/=10;
  }
  if(f==1)
   break;
 }
 cout<<num-1;//输出能拼到的数 
}

【参考程序二】——冯老师答案

#include <iostream>
#include <math.h>
using namespace std;
int oneNums(int n) //返回整数n中数字1的个数 
{  int res=0;
   while(n)
   {
     if(n%10==1)
     {
      res++;
     }
     n=n/10;
   } 
  return res; 
 } 
int main()
{
 int n;
 int sum=0;
 int i=1;
 while(true
 {
  sum+=oneNums(i);//i中1的格式
  
  if(sum>2021break;
  i++;
 }
 cout<< i-1<<endl//减1是因为这一张无法凑出 
 return 0;
}


图片


添加 家长论坛微信 



发布于 2024-04-27 12:21

免责声明:

本文由 梁老师 原创发布于 家长帮 ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论

广告
All Rights Reserved Powered BY WeCenter V4.1.0 © 2025 京ICP备20005761号-2