1000 A+B Problem

#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {int a,b;while(cin>>a>>b){cout<<a+b<<endl;}return 0;
}

Tips:

这题唯一需要注意的地方应该就是读取数据的问题,知道怎么样使用while(cin>>a>>b)或者while(scanf("%d %d",&a,&b) != EOF)来保证读数据读到数据末。


1001 Sum Problem

#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {int n;int sum;while(cin>>n){if(n%2 == 0)sum = n/2*(n+1);else sum = (n+1)/2 * n;cout<<sum<<endl;cout<<endl;}return 0;
}

Tips:

首先第一个要注意的就是这题要求再每个输出后面再多加一个换行,这是一个可能漏看的点。这题如果用1到n的循环累加提交应该不会报错。但如果用高斯公式的话,用(n+1)*n/2会造成数据溢出,需要先除2再相乘,但因为int类型不能整除会被自动略去小数部分,所以需要先判断n和n+1哪个可以被2整除。


1002 A+B Problem II

#include <iostream>
using namespace std;
//将字符转为数字
int transCtoI(char c){switch (c){case '0':return 0;case '1':return 1;case '2':return 2;case '3':return 3;case '4':return 4;case '5':return 5;case '6':return 6;case '7':return 7;case '8':return 8;case '9':return 9;}return 0;
}
//将数字转为字符
char transItoC(int i){switch (i){case 0:return '0';case 1:return '1';case 2:return '2';case 3:return '3';case 4:return '4';case 5:return '5';case 6:return '6';case 7:return '7';case 8:return '8';case 9:return '9';}return 0;
}
//将字符串翻转
string trans(string s){char temps;for(int i = 0 ;i < s.length() / 2 ; i++){temps = s[i];s[i] = s[s.length() -i - 1];s[s.length() -i - 1] = temps;}return s;
}int main(int argc, const char * argv[]) {int cnt = 1,max,next = 0,temp = 0 , num1 = 0 , num2 = 0;string str1,str2,sum="";cin>>max;while(max > 0){sum = "";num1 = 0 ;num2 = 0;next = 0;temp = 0;cin>>str1>>str2;cout<<"Case "<<cnt++<<":"<<endl;cout<< str1 << " + "<<str2 <<" = ";str1 = trans(str1);str2 = trans(str2);for(int i = 0 ;i <str1.length()||i < str2.length();i++){//取每个字符将它转为数字,如果该字符下标已超出字符串长度,则将它设置等于0if(i < str1.length())num1 = transCtoI(str1[i]);elsenum1 = 0;if(i < str2.length())num2 = transCtoI(str2[i]);elsenum2 = 0;//计算出当前位相加后的数字并取模temp = (( num1 +  num2 + next) % 10);//如果当前位数字相加大于10则进位if((num1 + num2 + next) >= 10)next = 1;elsenext = 0;sum += transItoC(temp);}//如果最后的一位加法有进位,那要再字符串首加一if(next == 1)sum += "1";//注意要逆序输出for(int i = sum.length() - 1;i >=0 ;i--)cout<<sum[i];cout<<endl;max --;if(max > 0 )cout<<endl;}return 0;
}

Tips:

这个应该考验的是大家高精度算法。首先第一个要注意的就是要用字符串来存储数字而不是int、long等,这样依然会造成数据溢出。第二就是要如何将字符类型和数字类型的进行转换,因为c++本身似乎不提供这个函数,自己写一个也是很方便的。最后要注意的就是进位问题。


1003 Max Sum

#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {int t,n,max = -1001;int a[1000001],sum = 0 , cnt = 1;int head = 0 ,tail = 0;int temphead = 0 , temptail = 0;cin>>t;while(t-- > 0){cin>>n;sum =  temphead = temptail = head = tail = 0;max = -1001;for(int i = 0 ;i < n ; i++){cin>>a[i];sum += a[i];if(sum > max){max = sum;head = temphead;tail = i;}if(sum < 0 ){temphead = i + 1 ;sum = 0;}}cout << "Case "<<cnt++<<":"<<endl;cout << max << " " <<head+1 << " " << tail+1 <<endl;if(t != 0)cout<<endl;}return 0;
}

Tips:

本题就是求一个最大子序列问题,一开始我以为会超级复杂。后来在网上看了题解之后惊讶才这么点代码?果然学好数学很重要。
这题可以用暴力求解的方式,遍历每种子序列的组合。比如序列(6,-1,5,4,7)
子序列组合:
6,(6,-1),(6,-1,5),(6,-1,5,4),(6,-1,5,4,7)
-1,(-1,5),(-1,5,4),(-1,5,4,7)
5,(5,4),(5,4,7)
4,(4,7)
7
这题要求的是子序列的最大和,所以如果一个子序列的和小于0,那么这个序列加上下一个数字,一定比单独这个数字的值还要小,所以可以重新以下一个数字开始计算子序列。这就是这个代码变的如此简洁的原因。


1004 Let the Balloon Rise

#include <iostream>
#include <map>
using namespace std;int main(int argc, const char * argv[]) {string str[1001];string s = "";map<string,int> amap;map<string,int>::iterator iter;int n , max = 0;cin>>n;while (n != 0) {max = 0;s = "";amap.clear();for(int i = 0; i < n; i++){cin>>str[i];//查找是否在map中已存在这个颜色,存在则该颜色数量加一,不存在则在map中插入该颜色iter = amap.find(str[i]);if(iter != amap.end()){amap[str[i]] = amap[str[i]] + 1;}else{amap[str[i]] = 1;}}//遍历map,查找其中次数最多的颜色for(iter = amap.begin() ; iter != amap.end(); iter++){if(iter->second > max){max = iter->second;s = iter->first;}}cout<<s<<endl;cin>>n;}return 0;
}

Tips:

这题主要就是统计出现过的字符串,这里用了map这个容器来实现,其中map<string,int>::iterator iter声明的iter是一个类似于指针的变量,从代码中可以看出要找一个map中存在的键值或者是遍历map中的值都需要借助iter来实现。当然也可以开两个一维数组,一个存字符串一个存出现的个数,那样可能就会比较简单一点。

转载于:https://www.cnblogs.com/amoy-zhp/p/6536968.html

杭电算法题 HDU 1000-1004相关推荐

  1. 最详细最简单:最大公因数求法、辗转相除法、更相减损法,入门ACM,杭电水题,算法递归,初级算法题一看就懂

    文章目录 前言 一.名称定义 1.最大公约数 2.辗转相除法 3.更相减损法 二.ACM杭电入门题 1.解题思路 三.解题参考代码(C语言,C++) 0.最优算法(C++) 1.辗转相除求解(C语言) ...

  2. 杭电acm的第1000题c语言解法

    首先我选择的是c语言的解法,开始是输入如下的答案: #include "stdio.h" int main(void) { long long a,b; scanf("% ...

  3. 上班无聊之际就聊聊杭电ACM1002题吧

    上班无聊之际就聊聊杭电ACM1002题吧 杭电acm不但对提交的输出格式有严格的要求,而且对代码本身也有要求毕竟我们自己写代码的时候的编译器和它内部的不一定一样是不是.所以就导致了一系列的坑爹事件,先 ...

  4. Help Johnny-(类似杭电acm3568题)

    Help Johnny(类似杭电3568题) Description Poor Johnny is so busy this term. His tutor threw lots of hard pr ...

  5. 杭电2317题 Nasty Hacks

    /** 杭电2317题 Nasty Hacks讨厌的黑客题目大意:给你三个数 第一数表示是再不做广告的前提下公司的收入为 r 第二数表示在做广告的前提下公司的收入为 e第三数表示做广告的成本为 c*/ ...

  6. 杭电acm2151题java的解法,杭电ACM题型分类

    杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...

  7. 杭电oj1620题c语言答案,杭电oj部分水题 c语言源代码.doc

    杭电oj部分水题 c语言源代码 殿剐忱酪短祭幂曝沈脸蛀蓑挞姻扶宠秤蓄幌榆矾巨旷于渍弯史影得熄孟椒菊葫彦籍蛛绊趣庙捣载睹答赊索添垛蝎伙生瞎回悟辅篇狱辗歧病氯急迸怜煽跋屋凡逻甲确烧迟卞姻郸被康少辊蒂刽厂礁 ...

  8. 杭电oj1062题c语言答案,杭电大OJ题1062,为什么这样的代码会Time Limited exceed,是太复杂了吗?...

    杭电大OJ题1062,为什么这样的代码会Time Limited exceed,是太复杂了吗?0 问题ProblemDescriptionIgnatiuslikestowritewordsinreve ...

  9. 算法题:1000个苹果和10个箱子

    最近去面试笔试遇到一道算法题,题目是放在最后面的加分题,大概内容如下: 现在有1000个苹果,和10个箱子,如何把这1000个苹果装在这10个箱子里,才能使不管任何数量(1-1000)的苹果,都能一次 ...

最新文章

  1. php gt lte gte,springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)
  2. 适合初学者对Yaf框架的学习(一)
  3. 【Kotlin】Kotlin 领域特定语言 DSL 原理 二 ( 中缀表达式 )
  4. dump java崩溃自动 不生成_一个宏命令,就可以程序崩溃时生成dump文件
  5. 计算机网络实验仿真系统设计,计算机网络实验课程仿真系统平台的研究与设计...
  6. android r文件错误,Android R文件丢失异常原因汇总
  7. Acwing 271. 杨老师的照相排列
  8. threejs设置对象层次
  9. logstash_output_mongodb插件用途及安装详解
  10. PonyAI进军自动驾驶货运,乘用无人车历史性“小马过河”
  11. 【C】 typedef struct LNode * list
  12. 单细胞测序之scater包数据分析教程复现
  13. [流体力学]描述流体运动的方法:拉格朗日法和欧拉法
  14. 读书笔记:[AWL]-2021.9.7
  15. python flask 直接调用摄像头直播
  16. 2020下半年新机最新消息_2020下半年3款重磅新机:三星Note20被吹爆,华为Mate40差点意思...
  17. 电脑没声音,喇叭上一个叉,显示无法找到输入输出设备(录制,耳机等等)
  18. 便签提醒事项怎么设置闹钟
  19. nginx禁止外网访问
  20. <Zhuuu_ZZ>Spark Streaming

热门文章

  1. 【SAP业务模式】之ICS(三):前台操作
  2. CodeForces 551E(平方分割
  3. What's new in C# from 2.0 to 5.0
  4. poj 1459-Power Network解题报告
  5. 【转】在centos linux上安装jdk7
  6. [导入]Nebula3学习笔记(5): IO系统
  7. python心跳包原理_Python 用心跳(UDP包)探测不活动主机
  8. simulink怎么生成vxworks的执行程序_让天下没有难改的Simulink模型
  9. Linux ct获取本机ip,[原]archlinux 下最新的netct工具配置ip地址
  10. pyuic4和pyrcc4d的差别