- 点击跳转专栏=>Unity3D特效百例
- 点击跳转专栏=>案例项目实战源码
- 点击跳转专栏=>游戏脚本-辅助自动化
- 点击跳转专栏=>Android控件全解手册
- 点击跳转专栏=>Scratch编程案例
- 点击跳转=>软考全系列
- 点击跳转=>蓝桥系列
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。
👉实践过程
需要所有整理的文档可底部卡片联系我,直接发压缩包。
😜马虎的算式
标题: 马虎的算式
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
答案直接通过浏览器提交。
注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。
//java
public class _02马虎的算式_枚举 {
public static void main(String[] args) {
int ans=0;
for (int a = 1; a < 10; a++) {
for (int b = 1; b < 10; b++) {
if (a != b) for (int c = 1; c < 10; c++) {
if (c != a && c != b) for (int d = 1; d < 10; d++) {
if (d != a && d != b && d != c) for (int e = 1; e < 10; e++) {
if (e != a && e != b && e != c && e != d) {
if ((a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e)){
ans++;
System.out.printf("(%d*10+%d)*(%d*100+%d*10+%d)==(%d*100+%d*10+%d)*(%d*10+%d)==%d\n",a,b,c,d,e,a,d,b,c,e,(a*100+d*10+b)*(c*10+e));
}
}
}
}
}
}
}
System.out.println(ans);
}
}
//c++
#include <iostream>
using namespace std;
int main(int argc, const char *argv[]) {
int ans=0;
for (int a = 1; a < 10; ++a) {
for (int b = 1; b < 10; ++b) {
if (b != a)
for (int c = 1; c < 10; ++c) {
if (c != a && c != b)
for (int d = 1; d < 10; ++d) {
if (d != a && d != b && d != c)
for (int e = 1; e < 10; ++e) {
if (e != a && e != b && e != c && e != d) {
// ab * cde = adb * ce
if ((a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e)) {
printf ("(%d*10+%d)*(%d*100+%d*10+%d)==(%d*100+%d*10+%d)*(%d*10+%d)==%d\n",a,b,c,d,e,a,d,b,c,e,(a*10+b)*(c*100+d*10+e));
ans++;
}
}
}
}
}
}
}
printf("%d",ans);
return 0;
}
😜振兴中华
标题: 振兴中华
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示:(也可参见图)
从我做起振
我做起振兴
做起振兴中
起振兴中华
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。
要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
答案是一个整数,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。
//c++
#include <iostream>
using namespace std;
int f(int x, int y) {
if (x == 3 || y == 4)return 1;
return f(x + 1, y) + f(x, y + 1);
}
int main(int argc, const char *argv[]) {
cout << f(0, 0) << endl;
return 0;
}
//java
public class _03振兴中华 {
public static void main(String[] args) {
// 重复
// 变化
// 边界
int ans = f(0, 0);
System.out.println(ans);
}
private static int f(int i, int j) {
if (i == 3 || j == 4) return 1;
return f(i + 1, j) + f(i, j + 1);//将两种走法的路线数相加
}
}
😜黄金连分数
标题: 黄金连分数
黄金分割数0.61803… 是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。
对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物,
其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!!
言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。
比较简单的一种是用连分数:
1
黄金数 = ---------------------
1
1 + -----------------
1
1 + -------------
1
1 + ---------
1 + ...
这个连分数计算的“层数”越多,它的值越接近黄金分割数。
请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。
小数点后3位的值为:0.618
小数点后4位的值为:0.6180
小数点后5位的值为:0.61803
小数点后7位的值为:0.6180340
(注意尾部的0,不能忽略)
你的任务是:写出精确到小数点后100位精度的黄金分割值。
注意:尾数的四舍五入! 尾数是0也要保留!
显然答案是一个小数,其小数点后有100位数字,请通过浏览器直接提交该数字。
//1.化为求斐波那契相邻两项的比值,到多少项?越多越精确,n/n+1项,n再往上增加,这个比值的小数点后101位是稳定的,也就是不变的
//2.double无法表示100位小数,BigInteger和BigDecimal
//java
public class _04黄金连分数 {
public static void main(String[] args) {
BigInteger a=BigInteger.ONE;
BigInteger b=BigInteger.ONE;
//斐波那契数列的迭代形式
for (int i = 3; i < 500; i++) {
BigInteger t=b;
b=a.add(b);//大整数的加法
a=t;
}
//大浮点数的除法
BigDecimal divide = new BigDecimal(a,110).divide(new BigDecimal(b,110), BigDecimal.ROUND_HALF_DOWN);
//截取字符串
System.out.println(divide.toPlainString().substring(0,103));
}
}
/*1、转为求斐波那契数列的n和n+1项
* 2、n取多少?再增加n,小数点后的101位没有变化
* 3、不能用c语言定义的整数型直接运算,而要手工地写大数加法和除法(减法)*/
//c++
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
int n = 400;
void i2s(int num, string &str) {
stringstream ss;
ss << num;
ss >> str;
}
string add(string a, string b) {
a = a.substr(a.find_first_not_of('0'));
b = b.substr(b.find_first_not_of('0'));
long long lenA = a.length();
long long lenB = b.length();
long long len = max(lenA, lenB) + 10;
//翻转,便于从低位逐步求和
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
string ans(len, '0');//初始化答案为len长,全部为字符0
// 把a拷贝到ans中
for (int i = 0; i < lenA; ++i) {
ans[i] = a[i];
}
int tmp = 0;//tmp是上一位相加后的进位
for (int i = 0; i < len; ++i) {
if (i < b.length())
tmp += (ans[i] - '0') + (b[i] - '0');//假设为18
else
tmp += (ans[i] - '0');
ans[i] = tmp % 10 + '0';//8 8+'0'
tmp /= 10;//1
}
reverse(ans.begin(), ans.end());
return ans.substr(ans.find_first_not_of('0'));
}
int cmp(string a, string b) {
unsigned long i1 = a.find_first_not_of('0');
if (i1 == string::npos)a = '0';
else a.substr(i1);
unsigned long i2 = b.find_first_not_of('0');
if (i2 == string::npos)b = '0';
else b.substr(i2);
if (a.length() > b.length())return 1;
else if (a.length() < b.length())return -1;
else {//长度相等
if (a < b)return -1;
if (a > b)return 1;
else return 0;
}
}
//此处,a一定大于等于b
string subtract(string a, string b) {
// 完整的减法里面,a可以小于b,这时结果为负数,交换ab进行下面的代码
// 1.翻转
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
// 2.按位做减法
for (int i = 0; i < b.length(); ++i) {
if (a[i] >= b[i]) {
a[i] = a[i] - b[i] + '0';
} else {//就要借
int k = 1;
while (a[i + k] == '0') {
a[i + k] = '9';
k++;
}
// 这里可以保证i+k这一位上不是0
a[i + k] = a[i + k] - '1' + '0';
a[i] = (a[i] - '0' + 10) - (b[i] - '0') + '0';
}
}
reverse(a.begin(), a.end());
if (a.find_first_not_of('0') == string::npos)return "0";
return a.substr(a.find_first_not_of('0'));
}
/*转换成减法*/
string divide(string a, string b) {
// 只考虑a<b的情况
string ans = "0.";
// 转化成减法
for (int i = 0; i < 101; ++i) {//101次
a.append("0");
int t = 0;
while (cmp(a, b) >= 0) {//a>=b
a = subtract(a, b);//不停地做减法
t++;//记录减法做了多少次
}
string t_str;
i2s(t, t_str);
ans.append(t_str);
}
return ans;
}
int main(int argc, const char *argv[]) {
string a = "1";
string b = "1";
cout << subtract(a, b) << endl;
for (int i = 3; i <= n; ++i) {
string tmp = b;
b = add(a, b);
a = tmp;
// cout << b << " " << endl;
}
// a b是斐波那契的n-1和n项
string ans = divide(a, b);
cout << ans << endl;
cout << ans.length()-2 << endl;
return 0;
}
😜打印十字图
题目标题:打印十字图
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)
$$$$$$$$$$$$$
$ $
$$$ $$$$$$$$$ $$$
$ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $ $
$ $ $ $$$$$ $ $ $
$ $ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $
$$$ $$$$$$$$$ $$$
$ $
$$$$$$$$$$$$$
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。
输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数
输出:
对应包围层数的该标志。
//c++
#include <iostream>
using namespace std;
char arr[9 + 4 * 28][9 + 4 * 28];
int N,L=0,R;
void printAll(int l, int r) {
for (int i = l; i <= r; ++i) {
for (int j = l; j <= r; ++j) {
if (arr[i][j] != '$')arr[i][j] = '.';
cout << arr[i][j];
}
cout << endl;
}
}
void dealN(int n) {
int l = 2 * (N - n), r = R-l;//可以取到最大最小小标
// 处理第一行和最后一行
for (int i = l + 2; i <= r - 2; ++i) {
arr[l][i] = '$';
arr[r][i] = '$';
}
// 处理第二行和倒数第二行
arr[l + 1][l + 2] = '$';
arr[l + 1][r - 2] = '$';
arr[r - 1][l + 2] = '$';
arr[r - 1][r - 2] = '$';
// 处理第三行和倒数第三行
arr[l+2][l+0] = '$';
arr[l+2][l+1] = '$';
arr[l+2][l+2] = '$';
arr[l+2][r] = '$';
arr[l+2][r - 1] = '$';
arr[l+2][r - 2] = '$';
arr[r - 2][l+0] = '$';
arr[r - 2][l+1] = '$';
arr[r - 2][l+2] = '$';
arr[r - 2][r] = '$';
arr[r - 2][r - 1] = '$';
arr[r - 2][r - 2] = '$';
// 处理两边
for (int j = l+3; j <= r - 3; ++j) {
arr[j][l] = '$';
arr[j][r] = '$';
}
}
int main(int argc, const char *argv[]) {
scanf("%d", &N);
R=9 + 4 * (N - 1) - 1;
for (int i = N; i >=1 ; --i) {
dealN(i);
}
// 十字的行列
for (int j = 2*N; j <2*N+5 ; ++j) {
arr[2*N+3-1][j]='$';
arr[j][2*N+2]='$';
}
// 十字的列
// for (int j = 2*N; j <2*N+5 ; ++j) {
// }
printAll(0, 9 + 4 * (N - 1)-1);
return 0;
}
//java
public class _08打印十字图 {
static int N, L = 0, R;
static char[][] arr;
static void deal(int n) {
//n=3,总宽17,最大下标16
int l,r;
l= (N-n)*2;//最小下标
r=l+9+4*(n-1)-1;//最大下标
for (int i = l+2; i <= r-2; i++) {
arr[l][i] = '$';
arr[r][i] = '$';
}
arr[l+1][l+2] = '$';
arr[l+1][r-2] = '$';
arr[r-1][l+2] = '$';
arr[r-1][r-2] = '$';
for (int i = l; i < l+3; i++) {
arr[l+2][i] = '$';
arr[r - 2][i] = '$';
}
for (int i = r; i >r-3 ; i--) {
arr[l+2][i] = '$';
arr[r - 2][i] = '$';
}
for (int i = l+3; i <= r-3; i++) {
arr[i][l] = '$';
arr[i][r] = '$';
}
}
static void printAll() {
for (int i = 0; i <= R; i++) {
for (int j = 0; j <= R; j++) {
if (arr[i][j] != '$') arr[i][j] = '.';
System.out.print(arr[i][j]);
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
R = 9 + 4 * (N - 1) - 1;//最大下标
arr = new char[R+1][R+1];
for (int i = N; i >=1 ; i--) {
deal(i);
}
int c_i=2*N+2;
int c_j=2*N+2;
arr[c_i][c_j]='$';
for (int i = c_i-2; i < c_i+3; i++) {
arr[c_i][i]='$';
}
for (int i = c_i-2; i < c_i+3; i++) {
arr[i][c_j]='$';
}
printAll();
}
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。