北大ACM1002题
#include"stdafx.h"#include<iostream>#include<vector>usingnamespacestd;intmain(intargc...
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
int n, s, q;
bool a, t, w = false;
char b;
cin >> n;
vector<vector<char> > e;
for(int i = 0; i < n; i++)
{
vector<char> c;
vector<char> d;
while(cin >> b)
{
if(b != '\n') //这句话好像没起到作用
c.push_back(b);
else
break;
}
for(int j = 0; j < c.size(); j++)
{
switch (c[j])
{
case '-': break;
case 'A':
case 'B':
case 'C': d.push_back('2');break;
case 'D':
case 'E':
case 'F': d.push_back('3');break;
case 'G':
case 'H':
case 'I': d.push_back('4');break;
case 'J':
case 'K':
case 'L': d.push_back('5');break;
case 'M':
case 'N':
case 'O': d.push_back('6');break;
case 'P':
case 'R':
case 'S': d.push_back('7');break;
case 'T':
case 'U':
case 'V': d.push_back('8');break;
case 'W':
case 'X':
case 'Y': d.push_back('9');break;
default: d.push_back(c[j]);break;
}
}
e.push_back(d);
}
for(int m = 0; m < e.size()-1; m++)
{
t = false;
a = false;
s = 1;
for(int l = m + 1; l < e.size(); l++)
{
if(m == 0)
{
if(e[m] == e[l])
{
w = true;
a = true;
s++;
q = m;
}
}
else if(m != 0)
{
for(int r = 0; r < m; r++)
{
if(e[m] == e[r])
t = true;
}
if(e[m] == e[l] && t == false)
{
w = true;
a = true;
s++;
q = m;
}
}
}
if(a == true)
{
cout << e[q][0] << e[q][1]
<< e[q][2] << '-'
<< e[q][3] << e[q][4]
<< e[q][5] << e[q][6]
<< " " << s << endl;
}
}
if(w == false)
cout << "No duplicates." << endl;
return 0;
}
其中有句话我想判断是否输入的是回车,好像没起到作用。
不要粘贴别的什么来,或是写一大堆。只需告诉我该怎么改就可以了。
本人是C++新手,最近刚研究数组,向量,也不懂什么算法,只有像这样做了,希望能有个有效的方案。谢谢各位了。 展开
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
int n, s, q;
bool a, t, w = false;
char b;
cin >> n;
vector<vector<char> > e;
for(int i = 0; i < n; i++)
{
vector<char> c;
vector<char> d;
while(cin >> b)
{
if(b != '\n') //这句话好像没起到作用
c.push_back(b);
else
break;
}
for(int j = 0; j < c.size(); j++)
{
switch (c[j])
{
case '-': break;
case 'A':
case 'B':
case 'C': d.push_back('2');break;
case 'D':
case 'E':
case 'F': d.push_back('3');break;
case 'G':
case 'H':
case 'I': d.push_back('4');break;
case 'J':
case 'K':
case 'L': d.push_back('5');break;
case 'M':
case 'N':
case 'O': d.push_back('6');break;
case 'P':
case 'R':
case 'S': d.push_back('7');break;
case 'T':
case 'U':
case 'V': d.push_back('8');break;
case 'W':
case 'X':
case 'Y': d.push_back('9');break;
default: d.push_back(c[j]);break;
}
}
e.push_back(d);
}
for(int m = 0; m < e.size()-1; m++)
{
t = false;
a = false;
s = 1;
for(int l = m + 1; l < e.size(); l++)
{
if(m == 0)
{
if(e[m] == e[l])
{
w = true;
a = true;
s++;
q = m;
}
}
else if(m != 0)
{
for(int r = 0; r < m; r++)
{
if(e[m] == e[r])
t = true;
}
if(e[m] == e[l] && t == false)
{
w = true;
a = true;
s++;
q = m;
}
}
}
if(a == true)
{
cout << e[q][0] << e[q][1]
<< e[q][2] << '-'
<< e[q][3] << e[q][4]
<< e[q][5] << e[q][6]
<< " " << s << endl;
}
}
if(w == false)
cout << "No duplicates." << endl;
return 0;
}
其中有句话我想判断是否输入的是回车,好像没起到作用。
不要粘贴别的什么来,或是写一大堆。只需告诉我该怎么改就可以了。
本人是C++新手,最近刚研究数组,向量,也不懂什么算法,只有像这样做了,希望能有个有效的方案。谢谢各位了。 展开
5个回答
展开全部
while(cin >> b)
{
if(b != '\n') //这句话好像没起到作用
你换成这样:
while(b = _getch())
{
if(b != '\r')
{
if(b != '\n') //这句话好像没起到作用
你换成这样:
while(b = _getch())
{
if(b != '\r')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用改了。改了也不会过,这题至少要用到 快速排序,冒泡过不了的。。
对刚学语言的新手 来说OJ不见得是个好地方,还是 找些进阶资料,把基础打牢,把数据结构掌握好后在去水。。。。。。。。。。。
对刚学语言的新手 来说OJ不见得是个好地方,还是 找些进阶资料,把基础打牢,把数据结构掌握好后在去水。。。。。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(b != '\n') //这句话好像没起到作用
上面的应该改为:
if(b != '\r')
你按Enter 后,b的ASCII值为 13,即'\r'
上面的应该改为:
if(b != '\r')
你按Enter 后,b的ASCII值为 13,即'\r'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
干脆整个字符串一下子读进来啦,一个一个字符的读进来比较麻烦。我是用二叉树来AC的...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询