oj基础94 求字符串的起始位置
问题描述
明明的问题可以归结为:输入两串字符串s和subs,求s中subs的起始位置。
cpp
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s,sub;
while(getline(cin,s)&&getline(cin,sub)){
size_t pos=s.find(sub);
//找到
if(pos!=string::npos){
cout<<pos+1<<endl;
}else{
cout<<0<<endl;
}
}
return 0;
}
//求字符串的起始位置
总结:
1、如何实现成对读取?
依旧是通过while循环实现,用&&连接读取两行的代码就行
while(getline(cin,s)&&getline(cin,sub))
2、用find函数
不需要口算KMP,用c++中的find()即可。要注意没找到的写法是string::npos
3、区分0-based和1-based
oj基础96 奖学金
问题描述
明明所在学校的惯例是在每学期的期末考试之后发放奖学金。
发放的奖学金共有五种,获取的条件各不相同:
-
院士奖学金:每人8000元,期末平均成绩高于80分,并且在本学期内发表1篇或1篇以上论文的学生均可获得。
-
五四奖学金:每人4000元,期末平均成绩高于85分,并且班级评议成绩高于80分的学生均可获得。
-
成绩优秀奖:每人2000元,期末平均成绩高于90分的学生均可获得。
-
西部奖学金:每人1000元,期末平均成绩高于85分的西部省份学生均可获得。
-
班级贡献奖:每人850元,班级评议成绩高于80分的学生干部均可获得。
只要符合条件就可以得奖。 每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。
例如明明的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
由于老师在学期末的时候很忙,所以,他把奖学金统计的事情交给明明做。老师把考试的相关数据给了明明,让他统计出以下数据:
1) 哪位同学获得的奖学金最多;
2) 获得最多奖学金的同学一共获得了多少奖学金;
3) 所有获得奖学金的同学一共获得了多少奖学金;
明明虽然很愿意帮老师这个忙,但是他发现,同学的数量很多,统计起来很麻烦,经常有统计出错的情况发生。于是明明就想请你帮一个忙,帮他写一个统计程序,统计出以上三项内容。
cpp
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N;
bool isFirst=true;
while(cin>>N){
if(!isFirst){
//不是第一行,输出数据前先输出空行
cout<<endl;
}
isFirst=false;
//每个学生的相关信息
int maxmoney=0;
long long allmoney=0;
string topstudent;
for(int i=0;i<N;i++){
string name;
int avggrade,classgrade,paper;
char isGanbu,isXibu;
cin>>name>>avggrade>>classgrade>>isGanbu>>isXibu>>paper;
int money=0;
//奖学金获得规则
if(avggrade>80&&paper>=1){
money+=8000;
}
if(avggrade>85&&classgrade>80){
money+=4000;
}
if(avggrade>90){
money+=2000;
}
if(avggrade>85&&isXibu=='Y'){
money+=1000;
}
if(classgrade>80&&isGanbu=='Y'){
money+=850;
}
allmoney+=money;
//更新
if(money>maxmoney){
maxmoney=money;
topstudent=name;
}
}
cout<<topstudent<<endl;
cout<<maxmoney<<endl;
cout<<allmoney<<endl;
}
return 0;
}
总结:
1、保证"奖金相同时,选第一个"
采用>
2、如何控制组间空行?
设置bool类型数据isFirst,初始为true,while中改为false
3、allmoney设置为longlong类型
由于总奖数可能是一个很大的数,防止溢出,用longlong
oj97 回文数2
问题描述
明明的问题可以归结为:给你一个整数(十进制),判断该整数的十进制数和它的二进制数是否全为回文数。
cpp
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
// 是否回文
bool isHuiwen(string s){
string s1=s;
reverse(s.begin(),s.end());
if(s1==s){
return true;
}else{
return false;
}
}
//将十进制数转为二进制数(字符串形式)
string toBinary(int n){
if(n==0){
return "0";
}
string bin="";
while(n>0){
bin=(n%2?'1':'0')+bin;\
n/=2;
}
return bin;
}
int main()
{
int N;
while(cin>>N){
//转为二进制
string Bs=toBinary(N);
//是否为回文数
string s=to_string(N);
if(isHuiwen(s)&&isHuiwen(Bs)){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
return 0;
}
总结:
1、有些标准函数,如果报未定义的错误,改C++编译器就行

2、整数可以直接通过标准函数转为字符串
to_string() 记得改到C++11上
单词

翻译
P16
利用类似的技术,不仅可能------事实上在当今的电视广播中也很常见------在虚拟演播室环境中呈现主持人和其他电视名人。在这种应用中,主持人是在绿幕前由跟踪摄像机拍摄,然后被插入到演播室的虚拟渲染中。该系统甚至允许对虚拟道具进行交互式操作。
P17
类似的技术正被应用于电影行业,例如为电影导演和演员提供电影场景在应用特效或其他合成后的实时预览。这种增强现实(AR)的应用有时被称为"预可视化(Pre-Vis)"。
广告与商业
P18
AR能够向潜在买家即时呈现产品的任意3D视图,这一能力已被广泛应用于广告和商业中。这项技术可以为客户带来真正的互动体验。例如,乐高(Lego)商店的顾客可以将玩具盒举到AR信息亭前,该信息亭随后会显示组装好的乐高模型的3D图像。顾客可以转动盒子,从任何有利位置查看模型。