程序设计练习题目

  • 跳骚
    • 题目大意
    • 思路
    • 代码
  • 幸运数字
    • 题目大意
    • 思路
    • 代码
  • 解方程
    • 题目大意
    • 思路
    • 代码

跳骚

题目大意

有一只跳骚,有一张卡片,卡片上有n+1个自然数,最后且最大的一个数是m,前面的n个数都比m小。跳骚可以向左向右跳,但是跳的步数只能是卡片上的数字。如果跳骚可以跳到它初始位置的左边一个位置,那就说这张卡片是成功的。给定n和m,问你有几张成功的卡片。

思路

我们设第i张卡片的值为Di,使用的次数为Xi(Xi的正负代表跳骚跳的方向),则Di和Xi应该满足以下关系

代码

#include <iostream>
#include <bits/stdc++.h>#define inf 0x3f3f3f3f
#define mod 1000000007
#define lmax 1000
#define pi 3.141592653589793238462643383279
#define eps 1e-7using namespace std;
typedef long long ll;
typedef __int128 inta;void scan(__int128 &x)//输入
{x=0;int f=1;char ch=getchar();while (!isdigit(ch)){if (ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}x*=f;
}
inline void print(__int128 x)//输出
{if(x<0){putchar('-');x=-x;}if(x>9) print(x/10);putchar(x%10+'0');
}
typedef struct
{inta num,many;
}node;
node factor[10000];
inta total;
inta powe(inta x,inta y);
void generation_factors(inta x);int main()
{inta n,m,sum;int t;scanf("%d",&t);while(t--){scan(n);scan(m);sum=0;generation_factors(m);for(inta i=total;i>=0;i--){if(factor[i].many%2)sum-=powe(m/factor[i].num,n);elsesum+=powe(m/factor[i].num,n);}print(sum);printf("\n");}return 0;
}inta powe(inta x,inta y)//计算x的y次方的值
{inta temp;temp=x;for(inta i=1;i<y;i++)temp*=x;return temp;
}void generation_factors(inta x)//生成x的所有因子
{total=0;factor[0].num=1;factor[0].many=0;for(inta i=2;i*i<=x;i++){if(x%i==0){while(!(x%i))x/=i;for(inta j=0;j<=total;j++){factor[total+1+j].num=i*factor[j].num;factor[total+1+j].many=factor[j].many+1;}total=total*2+1;}}if(x!=1){for(inta i=0;i<=total;i++){factor[total+i+1].num=x*factor[i].num;factor[total+i+1].many=factor[i].many+1;}total=total*2+1;}
}

幸运数字

题目大意

给定一个数字n,让你求出最少几个连续的8能整除n,如果没有则输出"0"。

思路

首先构造一个全8数字为[8/9*(10x-1)],其中x为全8数字的位数,那么原题就变成求最小的x,满足题目条件。
这里面我打错号的两个式子是错的,应该将9/8改为8/9.

代码

#include <iostream>
#include <bits/stdc++.h>#define inf 0x3f3f3f3f
//#define mod 1000000007
#define lmax 1000
#define pi 3.141592653589793238462643383279
#define eps 1e-7using namespace std;
typedef long long ll;
//typedef __int128 inta;ll mod(ll a,ll b,ll c);
ll modd(ll a,ll b,ll c);
void generation_factors(ll x);
ll gcd(ll a,ll b);
ll phi(ll x);
ll c[10000];
ll many;int main()
{ll n,l,m,minn;int tcase=0;while(~scanf("%lld",&n)){if(n==0)break;printf("Case %d:",++tcase);l=9*n/gcd(n,8);minn=l+1;if(!(l%2)||!(l%5))//这里一开始一直没看懂,应该是和公式中的10有关,2和5都是10的因数{printf("0无解\n");continue;}m=phi(l);generation_factors(m);for(int i=1;i<=many;i++){if(c[i]<minn&&modd(10,c[i],l)==1)minn=c[i];}printf("%lld\n",minn);}return 0;
}ll mod(ll a,ll b,ll c)//特殊处理的a*b mod c求值运算
{ll t1,t2,t3,t4,k=1000000,temp;t1=a/k;t2=a%k;t3=b/k;t4=b%k;temp=(((k*k)%c)*((t1*t3)%c)+(t2*t3)%c*k%c+(t1*t4)%c*k%c+(t2*t4)%c)%c;return temp;
}
ll gcd(ll a,ll b)//辗转相除求最大公因数
{if(a<b)swap(a,b);if(b==0)return a;return gcd(b,a%b);
}
ll phi(ll x)//求x的欧拉函数值
{ll temp=x;for(int i=2;i*i<=x;i++){if(x%i==0){while(x%i==0)x/=i;temp=temp/i*(i-1);}}if(x!=1)temp=temp/x*(x-1);return temp;
}
void generation_factors(ll x)//生成x的所有因子,结果保存在c数组里
{ll ss,sk;c[1]=1;many=1;for(ll i=2;i*i<=x;i++){if(!(x%i)){ss=1;while(!(x%i)){sk=many;for(ll j=ss;j<=sk;j++){c[++many]=c[j]*i;}x/=i;ss=sk+1;}}}sk=many;if(x!=1)for(ll i=1;i<=sk;i++)c[++many]=c[i]*x;
}
ll modd(ll a,ll b,ll c)//快速计算a的b次方模c的值
{ll ans,temp;ans=1;temp=a%c;while(b!=0){if(b%2)ans=mod(ans,temp,c);temp=mod(temp,temp,c);b/=2;}return ans;
}

解方程

题目大意

给一个质数P,问是否存在正整数N,M使得N3+P*N2=M3
如果存在,输出yes,否则输出no。

思路

代码

里面有二分查找的函数代码。

#include <iostream>
#include <bits/stdc++.h>#define inf 0x3f3f3f3f
#define mod 1000000007
#define lmax 1000
#define pi 3.141592653589793238462643383279
#define eps 1e-7using namespace std;
typedef long long ll;
ll binary__search(ll p);int main()
{ll p;int t;scanf("%d",&t);while(t--){scanf("%lld",&p);if(binary__search(p))printf("YES\n");elseprintf("NO\n");}return 0;
}ll binary__search(ll p)
{ll minn=1,maxx=20000000000,mid,temp;mid=(maxx+minn)/2;while(minn<=maxx){temp=3*mid*mid+3*mid+1;if(temp==p)return mid;if(temp<p)minn=mid+1;elsemaxx=mid-1;mid=(minn+maxx)/2;}return 0;
}

题目练习_跳骚_幸运数字_解方程相关推荐

  1. java求幸运数字_幸运数字问题 —— Java实现

    题目描述 小雅同学认为6,8是她的幸运数字,而其他数字均不是,一个幸运数是指在十进制表示下只含有幸运数字的数.给定你一个区间(a,b)a和b之间(其中包括a和b幸)运数的个数. 输入描述 输入两个整数 ...

  2. Java幸运数求和_[Java 实现] 获取幸运数字,相信你就是 Lucky Dog !

    相信你就是大家的 Lucky Dog(约瑟夫环) 1. 幸运根源 有10个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. 2. 我为大 ...

  3. Python 幸运数字

    Python 幸运数字 题目: ✌小艺定义一个幸运数字的标准包含3条: 1.仅包含4和7. 2.数字的前半部分等于后半年部分. 3.数字的长度是偶数. 输出描述:

  4. mysql纯数字用什么类型_用幸运数字起名美到极致,个性又独特,你的幸运数字是什么?...

    数字是一种符号,蕴藏着特殊的能量,而且数字历史悠久,生活中的时间.长度都是用数字用来计算度量的,因此十分有意蕴.我们每个人都有一个幸运数字,如果用来取名的话,可以将数字中的内涵和名字结合,给用名之人带 ...

  5. python幸运数字判断_幸运数字 小程序

    问题描述:1-N个数字,每个数字的范围-9999到9999,把这N个数字排序后,删除奇数位的数,然后把剩余的数按原位置排序后继续删除奇数位,直到剩余一个数为止,剩余的数就是幸运数,输出幸运数和它最初的 ...

  6. sql limit不接具体数字_这21个写SQL的好习惯,你要养成呀

    前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 公众号:「捡田螺的小男孩」 1. 写完SQL先explai ...

  7. java 分裂数字_分裂的补充:超越数字,打印物理可视化

    java 分裂数字 As noted in my earlier Nightingale writings, color harmony is the process of choosing colo ...

  8. JS字符串过滤数字_过滤大写数字

    JS字符串过滤数字_过滤大写数字 代码案例: //数字替换 if(data.summary){data.summary=data.summary.replace(/[\d|壹|贰|叁|肆|伍|陆|柒| ...

  9. 像素,视频制式,数字_模拟信号摄像头

    致谢:像素,视频制式,数字_模拟信号摄像头 1,PAL,NTSC,还有SECAM,这是全球现行的三种模拟技术彩色电视的制式. NTSC(National Television System Commi ...

最新文章

  1. 面试官:你能聊聊高并发下的接口幂等性如何实现吗?
  2. CCNA培训课总结笔记--配置OSPF实验(十一)
  3. 光脚丫学LINQ(029):如何将列表示为类成员
  4. Linux下配置Smba服务器
  5. python进阶九_网络编程
  6. MNIST数据可视化
  7. android删除键监听,「React Native」Android返回键监听
  8. C++:类访问修饰符
  9. 算法高级(47)-AI现在都可以写代码了-辅助编程
  10. 转载 Camera Link接口
  11. IPC之消息队列(Message Queue)
  12. blender学习日志
  13. python-人工智能-遗传算法的实现
  14. 详解FindBugs的各项检测器
  15. Docker入门笔记(1)
  16. 现在Web前端工程师年薪区间是多少?
  17. 【腾讯云新知实验室】一站式提供视频解决方案
  18. Android开发如何定制framework层服务
  19. 火狐浏览器,笔记本触板无法双指上下滑动
  20. windows7 安装Emacs 24

热门文章

  1. 一文综述用于推荐系统的所有深度学习方法
  2. 海外电子邮箱怎么申请,电子邮箱排名,哪家好!
  3. python绘制地图
  4. 分享同城小程序怎么做_同城跑腿小程序开发基本功能
  5. stat驱动_由机器学习驱动的stat arb对冲基金
  6. iOS - 多控制器切换(带滑动动画)
  7. Windows XP 系统JDK安装
  8. Flutter插件开发-电池电量管理插件示例
  9. es analyzer分词
  10. 【素史】曼怛罗(81)