网站迁移建设方案,网站基础内容,三站一体网站制作,徐州网络推广服务目录 1.P0602
2.P0703
3.逗志芃的危机
4.唯一的傻子
5.JOE的矩阵 1.P0602
问题描述 编写一个程序#xff0c;输入一个4位的自然数#xff0c;将组成该数的各位数字重新排列#xff0c;形成一个最大数和一个最小数#xff0c;之后用最大数减去最小数#xff0c;得到一…目录 1.P0602
2.P0703
3.逗志芃的危机
4.唯一的傻子
5.JOE的矩阵 1.P0602
问题描述 编写一个程序输入一个4位的自然数将组成该数的各位数字重新排列形成一个最大数和一个最小数之后用最大数减去最小数得到一个新的自然数把这个数打印出来。然后对于这个新的自然数重复上述步骤直到该自然数的值不再发生变化。例如假设用户输入的自然数为1001那么由它所形成的最大数为1100最小数为11因此新的自然数为1089。对于1089由它形成的最大数为9810最小数为189因此新的自然数为9621。9621的最大数为9621最小数为1269结果为8352,。8352的最大数为8532最小数为2358结果为6174。6174的最大数为7641最小数为1467结果仍为6174因此程序结束。 样例输入 1001 样例输出 6174 示例代码
#includeiostream
#includealgorithm
using namespace std;int main() {int n, a[4];cin n;int max, min;while (1) {int temp 1000,n1n;for (int i 0; i 4; i) {//找到每个位上的数a[i] n / temp;n - a[i] * temp;temp / 10;}sort(a, a 4);//从小到大排序min a[0] * 1000 a[1] * 100 a[2] * 10 a[3] * 1;max a[0] * 1 a[1] * 10 a[2] * 100 a[3] * 1000;if (max - min n1) {//如果符合题目要求cout n1;return 0;}n max - min;//否则继续循环}return 0;
}
2.P0703
问题描述 一个整数的反置数指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾那么在它的反置数当中这些0就被省略掉了。比如说1245的反置数5421而1200的反置数是21。请编写一个程序输入两个整数然后计算这两个整数的反置数之和sum然后再把sum的反置数打印出来。例如如果用户输入435和754则输出结果为199。要求由于在本题中需要多次去计算一个整数的反置数因此必须把这部分代码抽象为一个函数的形式。 样例输入 435 754 样例输出 199 示例代码
#includeiostream
#includealgorithm
using namespace std;
int find_count(int n) {//求出n是几位数int cnt0;int temp 1;for (int i 0;; i) {//从10的0次方开始if (n / temp 0) {cnt i;break;}temp * 10;}return cnt;
}
int fanzhi(int n) {int temp 1,temp1,cnt0,index[12] { 0 };cnt find_count(n);for (int i 1; i cnt; i) {//最高位的10次方值temp * 10;}temp1 temp;for (int i 0; i cnt; i) {//分解每个位置上的数index[i] n/ temp;n n - index[i] * temp;temp / 10;}n 0;for (int i cnt - 1; i 0; i--) {//倒序n index[i] * temp1;temp1 / 10;}//cout cnt n endl;return n;
}
int main() {int a, b,sum;cin a b;sum fanzhi(a) fanzhi(b);sum fanzhi(sum);cout sum;return 0;
}
3.逗志芃的危机
问题描述 逗志芃又一次面临了危机。逗志芃的妹子是个聪明绝顶的人相比之下逗志芃就很菜了。现在她妹子要和他玩一个游戏这个游戏是这样的一共有n个数n是偶数写成一行然后两个人轮流取数每次只能从最前面或者最后面取走一个数全部取完则游戏结束之后每个人取走的数的和就是每个人的得分。由于逗志芃妹子很厉害但他又不想输所以只能找到你了你要告诉他最多可以得到多少分。注意妹子智商是maxlongint所以是不会犯错的每次的策略必然最优而且逗志芃是先手 输入格式 第一行一个数n表示有n个数。 第二行就是进行游戏的n个数。 输出格式 一个数最高得分 样例输入 2 10 20 样例输出 20 数据规模和约定 例0n,m1000,每个数不超过10000 。 示例代码
#includeiostream
using namespace std;int max(int a, int b) {if (a b) {return a;}else {return b;}
}
int min(int a, int b) {if (a b) {return b;}else {return a;}
}
int a[1000], res[1000][1000];//res[l][r]表示l到r区间里逗哥所能取的最大和int main() {int n,sum0;cin n;for (int i 0; i n; i) {cin a[i];}for (int r 0; r n; r) {for (int l r; l 0; l--) {if (l r) {//妹妹选而且是最后一个数她没得选res[l][r] 0;}else if ((r - l) % 2 1) {//我们选择,尽可能大res[l][r] max(res[l 1][r] a[l], res[l][r - 1] a[r]);}else {//妹妹选她更大也就是尽量让我们小res[l][r] min(res[l 1][r], res[l][r - 1]);}}}cout res[0][n-1];return 0;
}
4.唯一的傻子
问题描述 腿铮找2255有点事但2255太丑了所以腿铮不知道他的长相。正愁不知道到如何找他的时候他突然看见计33班围成了一个圈在领微积分试卷。计33班有n个人其中班长编号为0其余同学依次按顺时针方向编号。 只听见计33小导说“x号同学顺时针方向往后数的第k个的神犇出列不包括x号同学领取满分试卷”。剩下的人继续围成一个小圈。这样一个过程持续了n-1次那么显然最后只剩下了一个人。众所周知2255是个大傻子门门挂科不符合满分试卷这一前提条件。通过这样一个过程腿铮终于找到了2255并血虐了他。 求2255的编号是多少。 输入格式 第一行一个n表示计33班的人数。 接下来n-1行表示小导说话中的x和k。 输出格式 一个数字表示2255的编号。 样例输入 3 1 1 0 1 样例输出 0 数据规模和约定 前90%数据保证n10^4. 前100%数据保证n10^61kmin(当时圈中人数,1000) 示例代码
1.链表最后一个超时了
#includeiostream
#includemalloc.h
using namespace std;typedef struct stu {int number;//学生编号struct stu *next;
}STU;void link_creat_head(STU** p_head, STU* p_new)
{STU* p_mov *p_head;if (*p_head NULL) //当第一次加入链表为空时head执行p_new{*p_head p_new;p_new-next NULL;}else //第二次及以后加入链表{while (p_mov-next ! NULL){p_mov p_mov-next; //找到原有链表的最后一个节点}p_mov-next p_new; //将新申请的节点加入链表p_new-next NULL;}
}int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);STU* head NULL, * p_new NULL;int n;scanf(%d, n);for (int i 0; i n; i) {p_new (STU*)malloc(sizeof(STU));//申请一个新节点p_new-number i;link_creat_head(head, p_new); //将新节点加入链表}int start, k;for (int i 0; i n - 1; i) {scanf(%d %d, start, k);p_new head;while (p_new-number ! start) {//找到编号为start的学生p_new p_new-next;}for (int j 0; j k-1; j) {//找到这个学生这个学生的下一个学生会被删除if (p_new-next NULL) {//如果这个学生是链表尾部那么该学生下一个为队首p_new head;continue;}p_new p_new-next;}if (p_new-next NULL) {//如果要删除的学生为空说明是删除的是队首则要更新队首head head-next;}else {p_new-next p_new-next-next;}}printf(%d,head-number);return 0;
}
2.逻辑分析简单法
当输入第n-1个时还剩两个学生要删除的肯定不是输入的那个学生则最后一个输入的学生就是仅存下来的学生
#includeiostream
using namespace std;int main(){int n;cinn;int x,k;for(int i0;in-1;i){scanf(%d%d, x,k);}coutxendl;return 0;
}
5.JOE的矩阵
问题描述 最近JOE又在线性代数的模拟考中拿满分了这直接导致了JOE对于计算矩阵的热情急剧下降所以JOE希望能有这样一个程序能帮助他计算矩阵的秩。 输入格式 第一行两个数n,m表示矩阵是n*m的。 下面共n行每行m个数可能为负表示这个矩阵。 输出格式 这个矩阵的秩。 样例输入 2 3 1 2 1 2 4 3 样例输出 2 数据规模和约定 40% n, m 5 70% n, m 10 100% n, m 20 分析 用寻找非零子式的方法确定矩阵的秩有其局限性当矩阵阶数较高时计算量会显著增加因此在线性代数中使用初等变换化行阶梯型是常用的方法。 示例代码
#include iostream
#include cstdio
#include cmath
#include algorithmusing namespace std;const int N 110;
const double eps 1e-8;double a[N][N];
int n, m;int gauss() {int r, c;for (r 0, c 0; c n; c) {//对第c列进行处理则要将第c行包括之后的行进行处理// 找到最大值的行int t r;for (int i r; i n; i) {if (fabs(a[i][c]) fabs(a[t][c]))t i;}if (fabs(a[t][c]) eps) continue;//如果最大的都是0则该列以及对应的行不需要处理了// 2. 交换到对应的列的首行for (int i c; i m; i) swap(a[r][i], a[t][i]);// 3. 本行首列置为1for (int i m - 1; i c; i--) a[r][i] / a[r][c];// 4. 下面的行首列置为0for (int i r 1; i n; i) {if (fabs(a[i][c]) eps) continue;for (int j m - 1; j c; j--) {a[i][j] - a[i][c] * a[r][j]; // - 首航本列 * i, r首列商}}r;}return r;
}int main() {cin n m;for (int i 0; i n; i) {for (int j 0; j m; j) {scanf(%lf, a[i][j]);// printf(%.2lf\n, a[i][j]);}}int t gauss();printf(%d\n, t);return 0;
}蓝桥杯算法训练-JOE的矩阵_天下一般的博客-CSDN博客