acm
给定一组数字,一组有9个数字,将这9个数字填写到3*3的九宫格内;使得横,竖,斜对角一条线上的三个数字之和相等;如果无解则打印无解;
#include <iostream>
#include <algorithm>
using namespace std; //a[9]为从小到大排好序的一维数组,b[3][3]为九宫格的二维数组
int jiuGongGe(int b[][3],int a[9])
{
int x = 0, y = 1;
b[x][y] = a[0]; //将最小的数字赋值给b[0][1],九宫格中第一行第二列的位置
for (int k = 1; k < 9; k++)
{
int xNew = x - 1;
int yNew = y + 1; //依次向右向上寻找,将下一个数字放在该位置
if (xNew < 0)
xNew = 2;
if (yNew > 2)
yNew = 0;
if (b[xNew][yNew] != 0){ //若该位置有数字了,则向下寻找,将下一个数字放在该位置
xNew = x + 1;
yNew = y;
}
b[xNew][yNew] = a[k];
x = xNew;
y = yNew;
}
int row1 = b[0][0] + b[0][1] + b[0][2]; //计算九宫格中每一行,列,斜对角线上的值
int row2 = b[1][0] + b[1][1] + b[1][2];
int row3 = b[2][0] + b[2][1] + b[2][2];
int col1 = b[0][0] + b[1][0] + b[2][0];
int col2 = b[0][1] + b[1][1] + b[2][1];
int col3 = b[0][2] + b[1][2] + b[2][2];
int dig1 = b[0][0] + b[1][1] + b[2][2];
int dig2 = b[2][0] + b[1][1] + b[0][2];
int flag = 0; //比较横竖斜方向上的的值是否相等
if (row1 == row2&&row1 == row3&&row1 == col1&&row1 == col2&&row1 == col3&&row1 == dig1&&row1 == dig2)
flag = 1;
return flag;
} int main()
{
int a[9];
for (int i = 0; i < 9; i++) //输入九个数字
cin >> a[i];
sort(a, a + 9); //对九个数字按照从小到大的顺序排序
for (int i = 0; i < 9; i++) //输出排好序的九个数字
cout << a[i] << " ";
cout << endl;
int b[3][3] = { 0 };
int flag = jiuGongGe(b, a);
if (flag) //若满足要求,则输入九宫格中的数组,否则输出无解
for (int i = 0; i < 3; ++i){
for (int j = 0; j < 3; ++j){
cout << b[i][j] << "\t";
}
cout << endl;
}
else
cout << "无解" << endl;
system("pause");
return 1;
}
#include <string.h>
#include <iostream>
using namespace std; #define N 100 void tuse(int *p, int i, int j, int k) //将数组a[0][0]的地址传给指针p,其位置为i,j,连通区域的标号k
{ //判断为小岛的点赋值为2,并进入该点上下左右的点,递归的进行扩展,将连通在一起的点,都赋值为k
*(p + i*N + j) = k;
if (*(p + i*N + j - ) == )//左边
tuse(p, i, j - , k);
if (*(p + (i - )*N + j) == )//上面
tuse(p, i - , j, k);
if (*(p + i*N + j + ) == )//右边
tuse(p, i, j + , k);
if (*(p + (i + )*N + j) == )//下面
tuse(p, i + , j, k);
return;
} void computeArea(int *p, int br, int *p1, int *p2) //计算第一大区域的面积与第二大区域的面积,返回给指针p1,p2
{
for (int i = ; i < br; i++)
for (int j = ; j < br; j++)
{
if (*(p + i*N + j) == )
(*p1)++;
if (*(p + i*N + j) == )
(*p2)++;
}
} int main()
{
int br, i, j, num = ;
int row[][];
int col[][];
int k = , area1 = , area2 = ; //第一大岛的值全部为2
int a[][] = { { , , , , , },
{ , , , , , },
{ , , , , , },
{ , , , , , },
{ , , , , , },
{ , , , , , } };
memset(row, -, sizeof(row));
memset(col, -, sizeof(col));//compared with number 0
br = ;
for (i = ; i<br; i++) //判断每行中最左边的1和最右边的1的标号row[i][0],row[i][1],每列中最上边的1和最下边的1的标号col[i][0],col[i][1]
{
for (j = ; j<br; j++)
{
//scanf("%d", &a[i][j]);
if (a[i][j] == )
{
if (row[i][] == -)
row[i][] = j;
if (col[j][] == -)
col[j][] = i;
row[i][] = j;
col[j][] = i;
}
}
}
for (i = ; i<br; i++)
{
for (j = ; j<br; j++)
{
if (a[i][j] == )
{
if (j>row[i][] && j<row[i][] && i>col[j][] && i<col[j][]) //如果该点左边,右边,上边,下边有1,则判断该点为岛
{
tuse(&a[][], i, j, k); //进入该点,递归,将该点的连通区域都标记为k
k++;
}
}
}
}
for (i = ; i < br; i++)
{
for (j = ; j < br; j++) //输出更改标记后的矩阵a
cout << a[i][j] << " ";
cout << endl;
}
computeArea(&a[][], br, &area1, &area2);
if (area2 != ) //如果有第二大小岛,则输出area2的面积
cout << area2 << endl;
else
cout << area1 << endl; //否则,输出最大小岛的面积area1
system("pause");
return ;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; int maxProfit(vector<int> &prices) {
int len = prices.size();
if (len == )
return ;
vector<int> pre(len);
vector<int> post(len);
int minPrice = prices[];
for (int i = ; i<len; i++){ //计算第i点之前的最大利润pre
minPrice = min(minPrice, prices[i]);
pre[i] = max(pre[i - ], prices[i] - minPrice);
}
int maxPrice = prices[len - ];
for (int i = len - ; i >= ; i--){ //计算第i点之后的最大利润post
maxPrice = max(maxPrice, prices[i]);
post[i] = max(post[i + ], maxPrice - prices[i]);
}
int maxProfit = ;
for (int i = ; i<len; i++){ //计算第i点的,pre[i]与post[i]之和的最大值,赋值给maxProfit
maxProfit = max(maxProfit, pre[i] + post[i]);
}
return maxProfit;
} int main()
{
vector<int> array;
vector <int>::iterator Iter;
int num;
cout << "please input a number" << endl;
cin >> num;
while (num != ) //循环输入array[i]中的值,直到输入0停止
{
array.push_back(num);
cin >> num;
}
int maxp = maxProfit(array);
cout << "最大利润为:"<<maxp << endl;
system("pause");
return ;
}
acm的更多相关文章
- SCNU ACM 2016新生赛决赛 解题报告
新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- acm结束了
最后一场比赛打完了.之前为了记录一些题目,开了这个博客,现在结束了acm,这个博客之后也不再更新了. 大家继续加油!
- 关于ACM的总结
看了不少大神的退役帖,今天终于要本弱装一波逼祭奠一下我关于ACM的回忆. 从大二上开始接触到大三下结束,接近两年的时间,对于大神们来说两年的确算不上时间,然而对于本弱来说就是大学的一半时光.大一的懵懂 ...
- 第一届山东省ACM——Phone Number(java)
Description We know that if a phone number A is another phone number B’s prefix, B is not able to be ...
- 第一届山东省ACM——Balloons(java)
Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...
- ACM之鸡血篇
一匹黑马的诞生 故事还要从南京现场赛讲起,话说这次现场赛,各路ACM英雄豪杰齐聚南京,为争取亚洲总舵南京分舵舵主之职位,都使出了看 家本领,其中有最有实力的有京城两大帮清华帮,北大帮,南郡三大派上交派 ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- acm 1002 算法设计
最近突然想往算法方向走走,做了做航电acm的几道题 二话不说,开始 航电acm 1002 题主要是处理长数据的问题,算法原理比较简单,就是用字符数组代替int,因为int太短需要处理的数据较长 下面是 ...
- ACM进阶计划
ACM进阶计划ACM队不是为了一场比赛而存在的,为的是队员的整体提高.大学期间,ACM队队员必须要学好的课程有:lC/C++两种语言l高等数学l线性代数l数据结构l离散数学l数据库原理l操作系统原理l ...
随机推荐
- mongoDB数据库插入数据时报错:db.collection is not a function
nodejs连接mongodb插入数据时,发现mongoDB报错:db.collection is not a function.解决方法: 1.npm下载mongodb2.x.x版本替换3.x.x ...
- 《Redis 优化》
一:管道技术 - 由于 redis 和 客户端是使用 TCP 连接的,那么在使用中就会产生往返耗时. - 虽然可能单条影响并不大,但是如果执行较多的命令会对性能产生影响. - 使用管道原理和 keep ...
- svn 目录
svn介绍 SVN与Git的区别 SVN服务的模式和多种访问方式 多种访问原理图解与优缺点 SVN安装部署 svn 部署 配置 配置svn用户及密码 配置svn用户及权限 svn 启动命令讲解 svn ...
- django时区设置 media配置 日期截断函数 上传图片管理设计方案
1.django时区 修改一下app里的设置 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True # 不用UTC时间 USE_TZ ...
- spring-boot 速成(2) devtools之热部署及LiveReload
JRebel热部署插件相信很多人都知道,但是这是一款商业插件,spring-boot框架也提供了类似的功能,即:devtools,关键是免费的! 使用方法如下: 一.添加 devtools依赖 dep ...
- c# 传入c++dll 回调函数输出byte 导致 bug
- js对象添加动态属性
在业务中,经常会遇到使用同个方法调用多个同类型接口,以下简单模拟两个API接口 // api-1 { code: 0, status: 200, title: 'web前端框架', list: [ { ...
- The Designer (笛卡尔定理+韦达定理 || 圆的反演)
Nowadays, little haha got a problem from his teacher.His teacher wants to design a big logo for the ...
- vuejs服务端渲染更好的SEO,SSR完全指南Nuxt.js静态站生成器
vuejs服务端渲染更好的SEO,SSR完全指南Nuxt.js静态站生成器SSR 完全指南https://cn.vuejs.org/v2/guide/ssr.html在 2.3 发布后我们发布了一份完 ...
- 收银台数据库存储AES加解密
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合.缺点是密钥的传输 ...