第二次上机作业

#include
#include
#include
#include
using namespace std;
bool huiwen(char* p, int len) {
for (int i = 0, j = len - 2; i < j; i++, j–) {
if (p[i] != p[j])
return false;
}
return true;
}
bool huiwen2(string p, int len) {
for (int i = 0, j = len - 1; i < j; i++, j–) {
if (p.at(i) != p.at(j))
return false;
}
return true;
}
int main(){
题目 1、已知一个矩阵,存储在一个二维数组中。将矩阵中和值为最大的那一行元素与首行对换。
int arr[5][5] = { {1},{2},{3},{4},{5} };
int max = 0; int num; int sum = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
sum += arr[i][j];
}
if (max < sum) {
max = sum;
num = i+1;
}
}
for (int k = 0; k < 5; k++) {
int temp;
arr[0][k] = temp;
arr[0][k] = arr[num][k];
arr[num][k] = temp;
}
for (auto& i : arr)
for (auto j : i)
cout << j << " ";
题目 2、已知一个方阵,存储在一个二维数组中。用指针访问数组元素的方法,计算方阵中上三角所有元素的和、下三角所有元素的和,以及主对角线上的所有元素和。
int arr[][5] = { {1},{2},{3},{4},{5} };
//对角线元素
for (int i = 0; i < 5; i++) {
for (auto p = arr,j=arr; p <j + 5; ) {
p += i;
for (auto q = *p,k=*p; q < k + 5;) {
q += i;
cout << *q << endl;
break;
}
break;
}
};
//上三角元素
auto p = arr;
for (int i = 0; i < 5; i++) {
for (auto q = p[i], j = p[0]; q < j + 5; q++)
cout << *q;
p++;
}
题目 3、判断字符串是否是“回文”。所谓“回文”是指顺读和逆读都是一样的串,例如串 12321 和 madam 都是回文。
要求:重新定义回文为:虑去所有非字母字符(包括空格)后,不考虑字母的大小写,从左向右和从右向左读都相同的词或短语。如“Madam, I’m adam”和“Golf, No Sir, prefer prison flog!”。改写上面程序,用string来代替字符数组来完成相同操作。
char arr[] = { “madam” };
int len = sizeof(arr);
int num = 0, num2 = 0;
if (huiwen(arr, len)) {
cout << “是回文数”<<endl;
};
string s(“Madam,i’m adam”);
string j(s.size(),’ ');
for (auto i : s) {
if (65 <= i &&i<= 90)
i += 32;

	if (97 <= i && i <= 122) {
		j[num] = i;
		num++;
	}
	 }
cout << j << endl;
for (int i = j.size() - 1; i >= 0; i--) {
	if (j.at(i) ==' ')//while意思是当什么什么时候,可以循环,而if是条件结构,不会循环
		num2++;
}
if (huiwen2(j, j.size()-num2))
	cout << "是回文数";
	题目 4、约瑟夫问题:n 个人围成一圈,从 1 开始顺序编号;游戏开始,首先生
	成一个 1 - n 区间内的随机数,从第一个人开始由 1 到 m 循环报数,报到 m 的人
	退出圈外,问最后留下的那个人原来的序号。
	提示:本题可以定义一个容器(vector<bool>),初始化大小(元素个数)为 n。
	容器里元素的值用来标识该人是否出局,1 在圈内,0 出局。值为 0 的元素不参
	加报数。此外,vector 容器中的元素是线性排列的,而人是围成圈的,用容器表
	示要有一种从容器尾部跳到其头的技巧,即下标加 1 除以 n 求余数
	srand((unsigned int)time(NULL));
int ramdam = rand() % 10;
int num = 0;
vector<int>vi (10, 1);
for (int i = 0; i < 10 - 1; i++) {
	FLAG:num += ramdam;
	if (num >= 9)
		num = ((num + 1) / ramdam) % num;
	if (vi.at(num) = 1)
		vi.at(num) = 0;
	else {
		goto FLAG;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值