一级a做爰片免费网站国语版的,用照片做的ppt模板下载网站,一个空间多个php网站,商业网站案例教程1.稀疏矩阵 问题描述 今天明明学到了什么叫做矩阵#xff0c;但他发现要将一个矩阵输入进电脑是一件很麻烦的事。特别是有些矩阵很大#xff0c;且大部分元素都是0#xff0c;我们称这类矩阵为稀疏矩阵。 于是#xff0c;明明发明了一种简单的表示方法#xff0c;只指出…1.稀疏矩阵问题描述今天明明学到了什么叫做矩阵但他发现要将一个矩阵输入进电脑是一件很麻烦的事。特别是有些矩阵很大且大部分元素都是0我们称这类矩阵为稀疏矩阵。 于是明明发明了一种简单的表示方法只指出矩阵中非零元素来表示该矩阵。例如一个矩阵0 0 0 52 0 0 00 1 0 00 0 4 0可以表示成1 4 52 1 23 2 14 3 4但明明又开始力不从心了于是再一次想到了你...明明的问题可以归结为试编程将一个稀疏矩阵a转换成只存放非零元素的矩阵b即找出每个不是0的元素按从左到右从上到下的顺序输出其所在的行和列以及它的值。总结设置一个二维矩阵遍历碰到非零的就输出相对应的结果。注意是每一个非0元素一行#includeiostreamusing namespace std;int main() {int M, N;bool firstcase true;while (cin M N) {if (!firstcase) {cout endl;}firstcase false;int arr[21][21];for (int i 0;i M;i) {for (int j 0;j N;j) {cin arr[i][j];}}for (int i 0;i M;i) {for (int j 0;j N;j) {if (arr[i][j] ! 0) {cout i 1 j 1 arr[i][j] endl;}}}}}2.矩阵转换问题描述明明是一个很聪明的孩子学什么东西都很快。但是他也有个缺点就是不愿意做重复的劳动往往学会一样东西以后就不太愿意再去碰它。有一天明明在数学课上学了矩阵的转换即有一个r×r的矩阵把矩阵中的数以左上到右下的对角线的方式进行交换然后形成一个新的矩阵。例如有个3×3的矩阵如下1 2 34 5 67 8 9通过以左上到右下的对角线交换后形成了一个新的矩阵1 4 72 5 83 6 9明明很快就学会了然后自己动手做了几个类似的转换。但是课后老师布置了很多矩阵转换的作业让同学回家练习这就使明明很厌烦了觉得自己已经学会了就没有再练习的必要了。于是明明就请你帮个忙帮他写一个程序来计算矩阵的交换帮他完成老师布置的作业。明明的问题可以归结为有一个r×r的矩阵把矩阵中的数以左上到右下的对角线的方式进行转换然后输出转换后的矩阵。总结注意不能直接交换会导致数据丢失或者覆盖。设置一个临时数组储存注意最后一个数字后面没有空格。#includeiostreamusing namespace std;int main() {int r;bool firstcase true;while (cin r) {if (!firstcase) {cout endl;}firstcase false;int arr[10][10];int swap[10][10];for (int i 0;i r;i) {for (int j 0;j r;j) {cin arr[i][j];}}for (int i 0;i r;i) {for (int j 0;j r;j) {swap[i][j] arr[j][i];}}for (int i 0;i r;i) {for (int j 0;j r;j) {cout swap[i][j] ;if (j r-1) cout ;}cout endl;}}}3.魔方阵问题描述在一次数学课上明明的老师讲了一种非常有趣的方阵称之为三阶魔方阵。它是一个三行三列由1、2、3、……8、9九个数字共同构成且它每行、每列、两对角线之和均相等于是一个合法的三阶魔方阵就形成了以下的方阵8 1 63 5 74 9 2富有钻研精神的明明回家后马上就对三阶魔方阵进行研究。他总结出了5条n阶魔方阵的规律(n为奇数)如下1 将“1”放在第一行最上面一行中间一列2 从“2”开始直到n*n为止各数依次按下列规则存放每一个数存放的行的行数比前一个数的行数减1每一个数存放的列的列数比前一个数的列数加1即前一个数的右上方。3 如果上一数的行数为1则下一个数的行数为n指最下面一行4 当上一个数的列数为n时下一个数的列数应为1指最左一列5 如果按上面规则确定的位置上已有数或上一个数是第一行第n列时则把下一个数放在上一个数的下面。有了以上的方法明明就可以轻易地构造出任意的n阶魔方阵。例如构造3阶魔方阵的过程如下先将1放在第一行的中间一列放1参考规则1* 1 ** * ** * *放2参考规则3* 1 ** * ** * 2放3参考规则4* 1 *3 * ** * 2放4参考规则5* 1 *3 * *4 * 2放5参考规则2* 1 *3 5 *4 * 2放6参考规则2* 1 63 5 *4 * 2放7参考规则5* 1 63 5 74 * 2放8参考规则48 1 63 5 74 * 2放9参考规则38 1 63 5 74 9 2但是随着n的不断增大构建一个n阶魔方阵所花的精力就越多。于是明明就请你帮忙帮助他用程序来构建n阶魔方阵。明明的问题可以归结为给你一个阶数n请你按照题目中描述的方法构造出n阶魔方阵。总结首次设置1的位置在循环中找到正确的行列位置。对于规则5在发现下一个位置不是0时要先退回原来的位置进行计算。#includeiostreamusing namespace std;int main() {int n;bool firstcase true;while (cin n) {if (!firstcase) {cout endl;}firstcase false;int arr[20][20]{0};arr[0][n/2] 1;int row 0;int col n / 2;for (int num 2;num n * n;num) {int prerow row;int precol col;row (row - 1n) % n;col (col 1) % n;if (arr[row][col] ! 0)//规则5{row prerow;col precol;row (row 1) % n;}arr[row][col] num;}for (int i 0;i n;i) {for (int j 0;j n;j) {cout arr[i][j] ;if (j n - 1) cout ;}cout endl;}}}4.最大效益问题描述给你一张5行5列的效益表表中的数字均为大于等于0的整数要求在这张表中选出5个数字使这5个数字的和最大。注这5个数字分别来自表中的不同行不同列即同一行只能选择一个数字同一列也只能选择一个数字。总结首先将每一行每一列都设置为未访问然后遍历数组选出一个最大的数字把这个数字的行列设置为已访问。直到选择出来的数字个数到5就结束。#includeiostreamusing namespace std;int main() {int arr[5][5];while (cin arr[0][0]) {for (int i 0;i 5;i) {for (int j 0;j 5;j) {if (i 0 j 0) continue;cin arr[i][j];}}bool rowuse[5] { false };bool coluse[5] { false };int maxsum 0;int count 0;while (count 5) {int maxdigit 0;int maxrow -1;int maxcol -1;for (int i 0;i 5;i) {if (rowuse[i]) continue;//继续1234for (int j 0;j 5;j) {if (coluse[j]) continue;if (arr[i][j] maxdigit){maxdigit arr[i][j];maxrow i;maxcol j;}}}//标记选中的行列if (maxrow ! -1 maxcol ! -1) {rowuse[maxrow] true;coluse[maxcol] true;maxsum maxsum maxdigit;count;}}cout maxsum endl;}}5.螺旋方阵问题描述给你一个正整数n请你按题目描述中所述的方法构造出n阶的螺旋方阵。总结设置4个边界当到达边界时就螺旋。每次到达边界时要把边界做相对应的变化。#includeiostreamusing namespace std;int main() {int n;bool firstcase true;while (cin n){if (!firstcase) {cout endl;}firstcase false;int arr[10][10] { 0 };int top 0;int bottom n - 1;int left 0;int right n - 1;int num 1;while (num n * n) {for (int i left;i right;i) {//从左到右arr[top][i] num;num;}top;for (int i top;i bottom;i)//从上到下{arr[i][right] num;num;}right--;for (int i right;i left;i--) {//从右到左arr[bottom][i] num;num;}bottom--;for (int i bottom;i top;i--) {//从下到上arr[i][left] num;num;}left;}for (int i 0;i n;i) {for (int j 0;j n;j) {cout arr[i][j];if (j n - 1) cout ;}cout endl;}}}6.求小数位数个数问题描述明明最近在一家软件公司实习公司分配给他一个任务要他写一个小程序这个程序的功能是求出一个浮点数的小数部分的长度。例如程序输入1.1则输出1程序输入1.11则输出2明明觉得这个非常简单花了不到5分钟的时间就把程序给写出来了然后就把程序交给了测试员测试。但是没有想到的是经过测试员的测试发现了一大堆的错误返回的结果很多都是不对的这个令明明相当的不解始终想不通自己的程序错在哪里。你是一名经验丰富的程序员明明把这个问题来求助于你明明和你说了他的想法你一听就明白明明错在了哪里原来明明使用double型来存放浮点数但是由于double型的精度问题不可能把所有的小数都精确的保存好如果小数位数很长就会出错。你发现了问题。现在请你写出正确的程序。 明明的问题可以归结为给你一个浮点数请你求出这个浮点数的小数位数。总结使用字符串在字符串中找到小数点的位置并记录小数位数个数就是字符串的长度-小数点的位置-1.因为索引是从0开始的。#includeiostream#includestringusing namespace std;int main() {string n;while (cin n) {size_t index n.find(.);if (index string::npos){cout 0 endl;}else {int sum n.length() - index-1;cout sum endl;}}}7.进制转换问题描述输入一个十进制数将其化成N进制数输出2≤N≤16)。 输出结果时大于等于10的数字用字母代替A代表10B代表11以此类推。总结进制转换先初始化结果字符串对于输入的数字取余数当余数小于10时就将数字转换为字符并且拼接到字符串前面当余数10时余数-10再转成字符串并且拼接到字符串前面。#includeiostream#includestringusing namespace std;string Basertran(int n,int base) {string digit ;if (n 0) return 0;while (n 0) {int a n % base;if (a 10) {digit char(0 a) digit;}else {digit char(Aa-10) digit;}n n / base;}return digit;}int main() {int m, N;while (cin m N) {string resultBasertran(m, N);cout result endl;}}8.方块转换问题描述一块N x N1N10正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式#1转90度图案按顺时针转90度。#2转180度图案按顺时针转180度。#3转270度图案按顺时针转270度。#4反射图案在水平方向翻转形成原图案的镜像。#5组合图案在水平方向翻转然后按照#1-#3之一转换。#6不改变原图案不改变。#7无效转换无法用以上方法得到新图案。如果有多种可用的转换方法请选择序号最小的那个。比如转换前-----转换后-----这种转换采取#1按顺时针转90度即可。注意图案中的字符“”和“-”在转90度后还是“”和“-”。不要认为“-”转90度后变成“|”。输入说明第一行 单独的一个整数N。第二行到第N1行 N行,每行N个字符不是就是-这是转换前的正方形。第N2行到第2*N1行 N行,每行N个字符不是就是-这是转换后的正方形。输出说明单独的一行包括1到7之间的一个数字在上文已描述表明需要将转换前的正方形变为转换后的正方形的转换方法。总结旋转180就是旋转90两次。注意在旋转和翻转时不能修改原图要创建新的图案来存取结果因为后面还要用原图来做其他转换。函数参数要用const引用因为函数返回的临时结果要用const才能传进去。#includeiostream#include vector#includestringusing namespace std;int N;//判断两个图形是否相等bool isCmp(const vectorstring a, const vectorstring b) {for (int i 0;i N;i) {if (a[i] ! b[i]) {return false;}}return true;}vectorstringr90( const vectorstring p) {vectorstringp1(N,string(N, ));for (int i 0;i N;i) {for (int j 0;j N;j) {p1[j][N - 1 - i] p[i][j];}}return p1;}vectorstringflip(const vectorstring p) {vectorstring p2 p;for (int i 0;i N;i) {for (int j 0;j N/2;j) {swap(p2[i][j], p2[i][N - j - 1]);}}return p2;}int main() {vectorstringbefore, after;while (cin N) {before.resize(N);after.resize(N);for (int i 0;i N;i) {cin before[i];}for (int i 0;i N;i) {cin after[i];}auto r1 r90(before);auto r2 r90(r1);auto r3 r90(r2);auto f flip(before);if (isCmp(r1, after)) cout 1 endl;else if (isCmp(r2, after))cout 2 endl;else if (isCmp(r3, after)) cout 3 endl;else if (isCmp(f, after)) cout 4 endl;else if (isCmp(r90(f), after) ||isCmp(r90(r90(f)), after) ||isCmp(r90(r90(r90(f))), after))cout 5 endl;else if (isCmp(before, after)) cout 6 endl;else cout 7 endl;}}