九度OJ平台练习(二)—— 题目1001

今天刷的题目是1001,题目用英文给出,但不难解读。

题目的意思是说,输入两个矩阵A和B(二者彼此的行数相同,列数相同),进行矩阵加法得到A+B,统计A+B矩阵中零行和零列的数量。

思路:

首先是计算A+B,这个不难,可以用二维数组实现。

其次是统计零行和零列,先明确概念,零行指的是整个行的每个数都为0的行,零列指的是整个列里的每个数都为0的列。那么我们只须分行和分列对数组进行遍历。

代码如下:

C++版本

#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
    int m,n;
    while(cin>>m){
        if(m == 0)break;//根据题目要求和样例,当m为0时,表示输入结束,退出
        cin>>n;
        int p[10][10];     //输入矩阵A
        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++)
                cin>>p[i][j];     //输入矩阵B,并直接加到矩阵A上,得到A+B
        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++){
                int temp;
                cin>>temp;
                p[i][j] += temp;
            }        int num = 0;//统计零行和零列
        for(int i = 0; i < m; i++){
            int j = 0;
            for(; j < n; j++){
                if( p[i][j] != 0) break;//只要发现有一个数不是0,即break
            }
            if( j == n) num++;//判断是否因发现非0的数而被break
        }     for(int j = 0; j < n; j++){
            int i = 0;
            for(; i < m; i++){
                if( p[i][j] != 0)break;
            }
            if( i == m) num++;         }
        printf("%d\n",num);
    }
    return 0;
}
时间: 2024-10-05 12:46:01

九度OJ平台练习(二)—— 题目1001的相关文章

九度OJ平台练习 —— 题目1009

这道题目不是很简单,第一反应可能是真的去构造出一棵树,然后递归遍历,比较两棵树的每个结点是否相同. 但这样子很麻烦,而且递归遍历的效率不高,我看到很多人用递归的方法最后超时无法通过. 我的方法是用静态数组模拟出二叉搜索树,根据二叉搜索树的特性,第i个节点的左孩子是第2*i个节点,右孩子是第2*i+1个节点,我们可以很方便地计算出每个节点的下标. Java代码如下: import java.util.*; public class Main{ public static void main(Str

九度OJ平台练习 —— 题目1012

这道题目设计到一点图论的知识,幸好我曾经学过图论. 思路是这样的: 当两个城市之间有道路能连通时,将这两个城市加入到同一个连通子集里,每个连通子集里的任意两个城市都是可以连通的. 比如存在两条路(1,2)和(2,3),那么1,2加入到一个连通子集s里,s = {1,2},2,3也加入到一个连通子集里,因为2已经在s中,那么把3加入到s中,s={1,2,3},根据s我们就可以得出,1和3是可以连通的. 处理完所有的路之后,我们得到j个连通子集,要使每个城市都能连通,即j个连通子集能够连通,至少需要

九度OJ平台练习 —— 题目1010

这道题目,只不过把加法拐了个弯,数字用英文单词的方式给出,本质其实没有变化.我们要做的,只是根据单词识别出它所代表的数字. Java代码如下: import java.util.*; public class Main{ public static void main(String[] args){ Scanner cin = new Scanner(System.in); while(cin.hasNext()){ String s = cin.nextLine(); int temp = 0

九度OJ平台练习 —— 题目1011

这道题是求最大子序列和,这是很经典的算法题,网络上有很多资料,我用的是动态规划的方法,时间复杂度为O(N). 假设序列的长度为n,那么和最大的连续子序列,只能以第0-第n-1中的某一个数结尾. 当遍历到第i个元素时,假设它前面的连续子序列和为maxhere. 如果maxhere>0,maxhere = maxhere + 第i个元素; 如果maxhere<=0,maxhere = 第i个元素(因为如果前面的连续子序列是负的,那我加上你反而变小了,那我还不如不加,就以我自己为子序列的起点,重新往

九度oj题目1009:二叉搜索树

题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树. 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树. 输出:                        如果序列相同则输出YES,否则输出NO 样

九度oj 题目1007:奥运排序问题

九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1. 第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万). 接下来一行给出M个国家号. 输出:                        排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名 格式为: 排名:排名

九度oj 题目1546:迷宫问题 (概率dp guess消元)

题目链接:点击打开链接 题目描述: 给定一个n*m的迷宫,如 S.. ..# E.E 其中,S代表开始位置,#代表不可行走的墙,E代表出口. 主人公从开始位置出发,每次等概率的随机选择下一个可以行走的位置,直到到达某一个出口为止. 现在他想知道,在这一概率事件中,它从开始位置走到某一个出口的期望步数是多少. 输入: 输入包含多组测试用例,每组测试用例由两个整数n,m(1<=n,m<=15)开始,代表迷宫的大小 接下去n行每行m个字符描述迷宫信息,具体规则如题面所述. 数据保证至少存在一个E和一

[ACM] 九度OJ 合唱队形 (最长递增子序列改版)

题目1131:合唱队形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1680 解决:520 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, K,他们的身高分别为T1, T2, -, TK, 则他们的身高满足T1 < T2 < - < Ti , Ti > Ti+1 > - > TK (1 <= i <=

[ACM] 九度OJ 1553 时钟

时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1733 解决:656 题目描述: 如图,给定任意时刻,求时针和分针的夹角(劣弧所对应的角). 输入: 输入包含多组测试数据,每组测试数据由一个按hh:mm表示的时刻组成. 输出: 对于每组测试数据,输出一个浮点数,代表时针和分针的夹角(劣弧对应的角),用角度表示,结果保留两位小数. 样例输入: 03:00 14:45 样例输出: 90.00 172.50 来源: 2014年王道论坛计算机考研机试全真模拟考试 解题思路: 求时针和分针的