- 点击跳转专栏=>Unity3D特效百例
- 点击跳转专栏=>案例项目实战源码
- 点击跳转专栏=>游戏脚本-辅助自动化
- 点击跳转专栏=>Android控件全解手册
- 点击跳转专栏=>Scratch编程案例
- 点击跳转=>软考全系列
- 点击跳转=>蓝桥系列
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。
👉实践过程
需要所有整理的文档可底部卡片联系我,直接发压缩包。
😜加法变乘法
我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+…+1011+12+…+2728+29+…+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {for (int i = 1; i <=46 ; ++i) {for (int j = i+2; j <=48 ; ++j) {if(i*(i+1)-(i+i+1)+j*(j+1)-(j+j+1)==2015-1225)cout<<i<<" "<<j<<endl;}}return 0;
}
😜三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉
- 三 羊 献 瑞
三 羊 生 瑞 气
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
void i2s(int num, string &str) {stringstream ss;ss << num;ss >> str;
}int main(int argc, const char * argv[]) {for (int b = 2; b < 9; ++b) {for (int d = 2; d < 9; ++d) {if(b==d)continue;for (int g = 2; g < 9; ++g) {if(g==b||g==d)continue;int c=b+1;if(c==b||c==d||c==g)continue;if(c+g<=10)continue;
/*a b c d+ e f g b
-------------------e f c b ie=1,a=9,f=0,c=b+1,c+g>10*/int sum = 9000 + b * 100 + c * 10 + d + 1000 + g * 10 + b;for (int i = 2; i < 9; ++i) {if(i==b||i==d||i==g||i==c)continue;if(sum<=(10000+c*100+b*10+i)&&sum>=(10000+c*100+b*10+i)) {printf("%2d%d%d%d\n", 9, b, c, d);printf("%2d%d%d%d\n", 1, 0, g, b);printf("%d\n", sum);printf("---------\n");}}}}}return 0;
}
😜交换瓶子
有N个瓶子,编号 1 ~ N,放在架子上。
比如有5个瓶子:
2 1 3 5 4
要求每次拿起2个瓶子,交换它们的位置。
经过若干次后,使得瓶子的序号为:
1 2 3 4 5
对于这么简单的情况,显然,至少需要交换2次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
输入格式为两行:
第一行: 一个正整数N(N<10000), 表示瓶子的数目
第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。
输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。
例如,输入:
5
3 1 2 5 4
程序应该输出:
3
再例如,输入:
5
5 4 3 2 1
程序应该输出:
2
#include <iostream>using namespace std;
int n;
int a[10001];
int ans;int pos(int x) {for (int i = 1; i <= n; ++i) {if (a[i] == x)return i;}return -1;
}void swap(int i, int j) {int t = a[i];a[i] = a[j];a[j] = t;
}void printArr() {for (int i = 1; i <= n; ++i) {printf("%d ", a[i]);}printf("\n");
}int main(int argc, const char *argv[]) {
// 处理输入scanf("%d", &n);for (int i = 1; i <= n; ++i) {scanf("%d", &a[i]);}
//遍历i:1-Nfor (int i = 1; i <= n; ++i) {
//如果a[i]=i,已经到位if (a[i] == i)continue;
//否则先找到i在a中的位置pos(i)和i位交换——swap(a,pos(i),i)else {swap(pos(i), i);ans++;}}// printArr();printf("%d\n", ans);return 0;
}
😜卡片换位
你玩过华容道的游戏吗?
这是个类似的,但更简单的游戏。
看下面 3 x 2 的格子
+---+---+---+
| A | * | * |
+---+---+---+
| B | | * |
+---+---+---+
在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵。
还有一个格子是空着的。
你可以把一张牌移动到相邻的空格中去(对角不算相邻)。
游戏的目标是:关羽和张飞交换位置,其它的牌随便在哪里都可以。
输入格式:
输入两行6个字符表示当前的局面
输出格式:
一个整数,表示最少多少步,才能把AB换位(其它牌位置随意)
例如,输入:
- A
**B
程序应该输出:
17
再例如,输入:
A B
程序应该输出:
12
#include <stdio.h>
#include <iostream>
#include <queue>
#include <set>using namespace std;char *start;
int posA, posB;
pair<int,int>posO;struct cmp {bool operator()(char *a, char *b) {return strcmp(a, b) < 0;}
};
set<char *, cmp> allState;struct StateAndLevel {char *state;int level;pair<int,int> pos;StateAndLevel(char *_state, int _level, pair<int,int> _pos) : state(_state), level(_level), pos(_pos) {}
};
queue<StateAndLevel> q;bool check(char *state) {//posA的位置是B,posB的位置是Areturn (state[posA] == 'B' && state[posB] == 'A');
}void swap(char *s, int i, int j) {char t = s[i];s[i] = s[j];s[j] = t;
}void bfs() {
// 将初始状态加入队列q.push(StateAndLevel(start, 0, posO));allState.insert(start);while (!q.empty()) {StateAndLevel &front = q.front();
//弹出队首,将队首和目标状态比较,如果相同,结束,注意压入队列的数据应该记录了层次char *state = front.state;int le = front.level;pair<int,int> x = front.pos;//空格的位置int i=x.first;int j=x.second;if (check(state)) {printf("%d\n", le);break;}
//将队首的邻居加入队列,重复上一步,注意:重复状态不要加入if (i - 1 >= 0) {char *new_state = (char *) malloc(6 * sizeof(char));//新建字符串strcpy(new_state, state);//拷贝,准备将空格和周边进行交换,得到下一个状态swap(new_state, i*3+j, (i - 1)*3+j);
// 查重if (allState.find(new_state) == allState.end()) {
// 将新状态加入队列,且加入到set中避免后续重复生成状态allState.insert(new_state);q.push(StateAndLevel(new_state, le + 1, make_pair(i - 1,j)));}}if (i + 1 <= 1) {char *new_state = (char *) malloc(6 * sizeof(char));//新建字符串strcpy(new_state, state);//拷贝,准备将空格和周边进行交换,得到下一个状态swap(new_state, i*3+j, (i + 1)*3+j);
// 查重if (allState.find(new_state) == allState.end()) {
// 将新状态加入队列,且加入到set中避免后续重复生成状态allState.insert(new_state);q.push(StateAndLevel(new_state, le + 1, make_pair(i + 1,j)));}}if (j - 1 >= 0) {char *new_state = (char *) malloc(6 * sizeof(char));//新建字符串strcpy(new_state, state);//拷贝,准备将空格和周边进行交换,得到下一个状态swap(new_state, i*3+j, i *3+j-1);
// 查重if (allState.find(new_state) == allState.end()) {
// 将新状态加入队列,且加入到set中避免后续重复生成状态allState.insert(new_state);q.push(StateAndLevel(new_state, le + 1, make_pair(i ,j-1)));}}if (j + 1 <= 2) {char *new_state = (char *) malloc(6 * sizeof(char));//新建字符串strcpy(new_state, state);//拷贝,准备将空格和周边进行交换,得到下一个状态swap(new_state, i*3+j, i *3+j+1);
// 查重if (allState.find(new_state) == allState.end()) {
// 将新状态加入队列,且加入到set中避免后续重复生成状态allState.insert(new_state);q.push(StateAndLevel(new_state, le + 1,make_pair(i,j+1)));}}q.pop();}
}int main(int argc, const char *argv[]) {start = (char *) malloc(6 * sizeof(char));
// 处理输入,得到起始字符串(长度为6)
//标记出A的位置和B的位置int index = 0;for (int i = 0; i < 2; ++i) {for (int j = 0; j < 3; ++j) {start[index] = getchar();if (start[index] == 'A')posA = i * 3 + j;if (start[index] == 'B')posB = i * 3 + j;if (start[index] == ' '){start[index] = '_';posO = make_pair(i,j);}index++;}getchar();}
// cout << start << endl;
//宽搜bfs();return 0;
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。