- 点击跳转专栏=>Unity3D特效百例
- 点击跳转专栏=>案例项目实战源码
- 点击跳转专栏=>游戏脚本-辅助自动化
- 点击跳转专栏=>Android控件全解手册
- 点击跳转专栏=>Scratch编程案例
- 点击跳转=>软考全系列
- 点击跳转=>蓝桥系列
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。

👉实践过程
需要所有整理的文档可底部卡片联系我,直接发压缩包。
😜猜算式
你一定还记得小学学习过的乘法计算过程,比如:
   273
x   15
------
  1365
  273
------
  4095
请你观察如下的乘法算式
    ***
x   ***
--------
    ***
   ***
  ***
--------
  *****
星号代表某位数字,注意这些星号中,
 0~9中的每个数字都恰好用了2次。
 (如因字体而产生对齐问题,请参看图p1.jpg)
请写出这个式子最终计算的结果,就是那个5位数是多少?
注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
#include <bits/stdc++.h>
using namespace std;
int n;
int a[6];
int pd(){
	int p[20]={0};
	for(int i=0;i<6;i++){
		int k=0;
		while(a[i]){
			p[a[i]%10]++;
			if(p[a[i]%10]>2)return 0;
			a[i]/=10;
			k++;
		}
		if(k<3) return 0;
	}
	return 1;
}
int main()
{
	for(int i=100;i<=999;i++)
		for(int j=100;j<=999;j++){
			a[0]=(j%10)*i;a[1]=(j/10%10)*i;  //a保存每一个状态的信息
			a[2]=(j/100)*i;a[3]=i*j;
			a[4]=i;a[5]=j;
			if(pd()){  //判断是否满足条件
				cout<<i*j<<" ";
			}
		}
	
	
	return 0;
} 
😜排列序数
X星系的某次考古活动发现了史前智能痕迹。
 这是一些用来计数的符号,经过分析它的计数规律如下:
 (为了表示方便,我们把这些奇怪的符号用a~q代替)
abcdefghijklmnopq 表示0
 abcdefghijklmnoqp 表示1
 abcdefghijklmnpoq 表示2
 abcdefghijklmnpqo 表示3
 abcdefghijklmnqop 表示4
 abcdefghijklmnqpo 表示5
 abcdefghijklmonpq 表示6
 abcdefghijklmonqp 表示7
 …
在一处石头上刻的符号是:
 bckfqlajhemgiodnp
请你计算出它表示的数字是多少?
请提交该整数,不要填写任何多余的内容,比如说明或注释。
#include <bits/stdc++.h>
using namespace std;
char s[]="abcdefghijklmnopq";
long long fc[18];
int flag[105];
int f(int b){
	int sum=0;
	for(int i='a';i<b;i++)
		if(flag[i]==0)sum++;
	flag[b]=1;
	return sum;
}
int main()
{
	char p[]="bckfqlajhemgiodnp";
	fc[1]=1;
	for(long long i=2;i<18;i++)  //求阶层
		fc[i]=fc[i-1]*i;
	int len=strlen(s);
	long long sum=0;
	for(int i=0;i<len-1;i++){   //求每一位对应的值
		sum+=fc[len-1-i]*(f(p[i]));
		
	
	}
	cout<<sum<<endl;
	return 0;
} 
😜还款计算
银行贷款的等额本息还款方法是:
 每月还固定的金额,在约定的期数内正好还完(最后一个月可能会有微小的零头出入)。
比如说小明在银行贷款1万元。贷款年化利率为5%,贷款期限为24个月。
 则银行会在每个月进行结算:
 结算方法是:计算本金在本月产生的利息: 本金 x (年利率/12)
 则本月本金结余为:本金 + 利息 - 每月固定还款额
 计算结果会四舍五入到“分”。
经计算,此种情况下,固定还款额应为:438.71
这样,第一月结算时的本金余额是:
 9602.96
 第二个月结算:
 9204.26
 第三个月结算:
 8803.9
 …
 最后一个月如果仍按固定额还款,则最后仍有0.11元的本金余额,
 但如果调整固定还款额为438.72, 则最后一个月会多还了银行0.14元。
 银行会选择最后本金结算绝对值最小的情况来设定 每月的固定还款额度。
 如果有两种情况最后本金绝对值相同,则选择还款较少的那个方案。
本题的任务是已知年化利率,还款期数,求每月的固定还款额度。
假设小明贷款为1万元,即:初始本金=1万元。
 年化利率的单位是百分之多少。
 期数的单位为多少个月。
输入为2行,
 第一行为一个小数r,表示年率是百分之几。(0<r<30)
 第二行为一个整数n,表示还款期限。 (6<=n<=120)
要求输出为一个整数,表示每月还款额(单位是:分)
例如:
 输入:
 4.01
 24
程序应该输出:
 43429
再比如:
 输入:
 6.85
 36
程序应该输出:
 30809
资源约定:
 峰值内存消耗(含虚拟机) < 256M
 CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
 java选手注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
 java选手注意:主类的名字必须是:Main,否则按无效代码处理。
c/c++选手注意: main函数需要返回0
 c/c++选手注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
 c/c++选手注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
#include <bits/stdc++.h>
using namespace std;
double r;
int n;
double sol(double x){
	int a=(x+0.005)*100;
	return a/100.0;
}
int main()
{
	cin>>r>>n;
	double money=10000.0/n;     //从最小开始枚举
	money=sol(money);           //精确到分 四舍五入
	double ans,minn=10000000;     //ans 答案  minn保存最近答案的数
	for(;1;money+=0.01){        //每次递增0.01
		double total=10000;     //初始化金钱
		for(int i=0;i<n;i++){     //算n个月过后还剩多少钱
			double lx=total*(0.01*r/12);
			total+=-money+lx;
			total=sol(total);
		}
		if(total<0){   //小于就退出
			if(fabs(total)<minn)
				ans=money;
			break;
		}
		ans=money;
	}
	cout<<(int)(ans*100)<<endl;
	return 0;
}
😜滑动解锁
滑动解锁是智能手机一项常用的功能。你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点。这些划过的点所组成的有向折线,如果与预设的折线在图案、方向上都一致,那么手机将解锁。
所谓两个点“相邻”:当且仅当以这两个点为端点的线段上不存在尚未经过的点。
此外,许多手机都约定:这条折线还需要至少经过4个点。
为了描述方便,我们给这9个点从上到下、从左到右依次编号1-9。即如下排列:
1 2 3
 4 5 6
 7 8 9
那么1->2->3是非法的,因为长度不足。
 1->3->2->4也是非法的,因为1->3穿过了尚未经过的点2。
 2->4->1->3->6是合法的,因为1->3时点2已经被划过了。
某大神已经算出:一共有389112种不同的解锁方案。没有任何线索时,要想暴力解锁确实很难。
 不过小Hi很好奇,他希望知道,当已经瞥视到一部分折线的情况下,有多少种不同的方案。
 遗憾的是,小Hi看到的部分折线既不一定是连续的,也不知道方向。
例如看到1-2-3和4-5-6,
 那么1->2->3->4->5->6,1->2->3->6->5->4, 3->2->1->6->5->4->8->9等都是可能的方案。
你的任务是编写程序,根据已经瞥到的零碎线段,求可能解锁方案的数目。
输入:
 每个测试数据第一行是一个整数N(0 <= N <= 8),代表小Hi看到的折线段数目。
 以下N行每行包含两个整数 X 和 Y (1 <= X, Y <= 9),代表小Hi看到点X和点Y是直接相连的。
输出:
 对于每组数据输出合法的解锁方案数目。
例如:
 输入:
 8
 1 2 2 3
 3 4 4 5
 5 6 6 7
 7 8 8 9
程序应该输出:
 2
再例如:
 输入:
 4
 2 4
 2 5
 8 5
 8 6
程序应该输出:
 258
资源约定:
 峰值内存消耗(含虚拟机) < 256M
 CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
#include <bits/stdc++.h>
using namespace std;
int fx[16][2]={{-1,0},{1,0},{0,-1},{0,1},
				{-1,-1},{-1,1},{1,-1},{1,1},
				{-1,-2},{-1,2},{1,-2},{1,2},
				{-2,-1},{-2,1},{2,-1},{2,1}};  //16个方向 
int fx2[8][4]={          //8个方向 要往上上 下下 左左 右右走 (保存上 然后走上上的时候好判断) 
	{-1,0,-2,0},{1,0,2,0},{0,-1,0,-2},{0,1,0,2},
	{-1,-1,-2,-2},{-1,1,-2,2},{1,-1,2,-2},{1,1,2,2}};
int n;
vector<int> vec[10];     //每个点的联通
int flag[10][10];       //标记走过的点
int sum=0;              //总数
class Pion{              //保存每个点的坐标
	public :
		int x,y;
};
Pion p[10];          //有9个点
int pd(int x,int y){             //判断符合条件
	if(x>0 && x<=3 && y>0 && y<=3 && flag[x][y]==0)
		return 1;
	return 0;
}
int pd2(int x,int y){           
	if(x>0 && x<=3 && y>0 && y<=3 && flag[x][y]==1)
		return 1;
	return 0;
}
void dfs(int k,int u,int s,int last){ //u表示 前一个属于连通点 s表示用了多少个连通点 last上一个点的标号
	if(s==n)        //符合条件
		sum++;
	if(u==0 && vec[k].size()>1) return ;
	if(vec[k].size()>u){         // 该点是连通点只有一个方向
		for(int i=0;i<vec[k].size();i++)
			if(vec[k][i]!=last){
				int kk=vec[k][i];
				flag[p[kk].x][p[kk].y]=1;
				dfs(kk,1,s+1,k);
				flag[p[kk].x][p[kk].y]=0;
			}
		
	}
	else{  //枚举每个方向  16+8个方向
		for(int i=0;i<16;i++){  /
			int x=p[k].x+fx[i][0],y=p[k].y+fx[i][1];
			if(pd(x,y)){
				flag[x][y]=1;
				dfs(3*(x-1)+y,0,s,k);
				flag[x][y]=0;
			}
		}
		for(int i=0;i<8;i++){
			int x=p[k].x+fx2[i][0],y=p[k].y+fx2[i][1];
			int x2=p[k].x+fx2[i][2],y2=p[k].y+fx2[i][3];
			if(pd2(x,y) && pd(x2,y2)){
				flag[x2][y2]=1;
				dfs(3*(x2-1)+y2,0,s,k);
				flag[x2][y2]=0;
			}
		}
	}
}
int main()
{
	cin>>n;
	int a,b;
	for(int i=0;i<n;i++){    //保存联通点
		cin>>a>>b;
		vec[a].push_back(b);
		vec[b].push_back(a);
	}
	for(int i=1,k=1;i<=3;i++)
		for(int j=1;j<=3;j++,k++)   //保存点的坐标
			p[k].x=i,p[k].y=j;
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++){    //每个点入口枚举
			int k=3*(i-1)+j;      //坐标判断点
			flag[p[k].x][p[k].y]=1;
			dfs(k,0,0,0);           
			flag[p[k].x][p[k].y]=0;
		}
			
	cout<<sum<<endl;
	return 0;
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。
 



















