实现时所用循环语句要最少,你会怎么做?

boych 2010-04-20 04:49:16
vector<int>中最小元素出现次数(键盘输入元素),大家一起交流交流下,说不定你会有所收获。
...全文
255 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
liutengfeigo 2010-04-20
  • 打赏
  • 举报
回复
。。。。。看戏
KSVINSON 2010-04-20
  • 打赏
  • 举报
回复
我想起了以个copy函数的写法,里面的技巧可以用到这

8个为界限
然后用switch,这样就把for循环展开,当很多元素时,这种方法可以减少for中的跳转
走好每一步 2010-04-20
  • 打赏
  • 举报
回复
int main()
{
int a[] = {3, 2, 4, 3, 4, 2, 5, 2, -1};

int min = a[0];
int cnt = 0;
for (int i=1; ; ++i)
{
if (a[i] == -1)
break;
if (a[i] == min)
{
++cnt;
}
else if (a[i] < min)
{
min = a[i];
cnt = 1;
}
else
NULL;
}
cout << "min:" << min << endl;
cout << "cnt" << cnt << endl;
return 0;
}
knate 2010-04-20
  • 打赏
  • 举报
回复

int iNumber = 1;
unsigned int iVal = v[0];
for(unsigned int x = 1;x < v.size();++ x){
if(v[x] < iVal){
iNumber = 1;
iVal = v[x];
continue;
}
if(v[x] == iVal)
++ iNumber;
}
cout<<iNumber<<" "<<iVal<<endl;
CoderPlusPlus 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 na2650945 的回复:]
C/C++ code

int minVal, occurs = 0;
for(vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)
{
minVal = ivec[0];
if(minVal >= ivec[ix])
{
if(minVal == ivec[ix])
++o……
[/Quote]

minVal = ivec[0];
这句位置的问题
boych 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 na2650945 的回复:]
C/C++ code

int minVal, occurs = 0;
for(vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)
{
minVal = ivec[0];
if(minVal >= ivec[ix])
{
if(minVal == ivec[ix])
++o……
[/Quote]
您试一下,反正我试了不行,求不到最小值,得到的总是最后一个元素
na2650945 2010-04-20
  • 打赏
  • 举报
回复

int minVal, occurs = 0;
for(vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)
{
minVal = ivec[0];
if(minVal >= ivec[ix])
{
if(minVal == ivec[ix])
++occurs;
}
else
{
minVal = ivec[ix];
occurs = 1;
}
}


这样为什么不行呢。
boych 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 pengzhixi 的回复:]
sort函数不就是给你用的吗 速度快。
[/Quote]
恩,明白你的意思了.
boych 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mstlq 的回复:]
C/C++ code

#include <vector>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
int da[8]={2,5,-1,6,-1,4,-1,8};
vector<int> vi(da,da+8);……
[/Quote]
高手就是高手,花样真多!
todayq 2010-04-20
  • 打赏
  • 举报
回复
mark
pengzhixi 2010-04-20
  • 打赏
  • 举报
回复
sort函数不就是给你用的吗 速度快。
pengzhixi 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 longxiangxl2008 的回复:]
引用 12 楼 pengzhixi 的回复:
引用 11 楼 longxiangxl2008 的回复:
引用 9 楼 pengzhixi 的回复:
直接排序后再算。


这个我试过,可是代码不简洁,用了两层循环

哪需要2层循环呢?按从小到大排序后,只需要将后面的元素和第一个元素比较就是了,如果相等就加1,如果不能就可以退出循环了。

我是指排序用了两层循环,您不用?
[/Quote]

对于vector有排序函数直接让你调用。
mstlq 2010-04-20
  • 打赏
  • 举报
回复

#include <vector>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
int da[8]={2,5,-1,6,-1,4,-1,8};
vector<int> vi(da,da+8);

//不用count,那就用两句解决……
sort(vi.begin(),vi.end());
int minc = upper_bound(vi.begin(),vi.end(),*vi.begin())-vi.begin();

cout<<"最小值出现了"<<minc<<"次."<<endl;
system("pause");
return 0;
}
boych 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pengzhixi 的回复:]
引用 11 楼 longxiangxl2008 的回复:
引用 9 楼 pengzhixi 的回复:
直接排序后再算。


这个我试过,可是代码不简洁,用了两层循环

哪需要2层循环呢?按从小到大排序后,只需要将后面的元素和第一个元素比较就是了,如果相等就加1,如果不能就可以退出循环了。
[/Quote]
我是指排序用了两层循环,您不用?
pengzhixi 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 longxiangxl2008 的回复:]
引用 9 楼 pengzhixi 的回复:
直接排序后再算。


这个我试过,可是代码不简洁,用了两层循环
[/Quote]
哪需要2层循环呢?按从小到大排序后,只需要将后面的元素和第一个元素比较就是了,如果相等就加1,如果不能就可以退出循环了。
boych 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pengzhixi 的回复:]
直接排序后再算。
[/Quote]

这个我试过,可是代码不简洁,用了两层循环
majx645339388 2010-04-20
  • 打赏
  • 举报
回复
我来学习了
pengzhixi 2010-04-20
  • 打赏
  • 举报
回复
直接排序后再算。
boych 2010-04-20
  • 打赏
  • 举报
回复
有没有谁能给出不用count函数的示例?
boych 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mstlq 的回复:]
写个简单的示范……
键盘输入部分请楼主自行解决

C/C++ code

#include <vector>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
int da[8]={2,5,-1,6,-1,4,-1,8};
……
[/Quote]
高手!!!
加载更多回复(6)

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧