没太搞明白第一个题啥意思。。。

shiter
人工智能领域优质创作者
博客专家认证
2015-04-24 09:36:37
...全文
787 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
难题 2015-04-29
  • 打赏
  • 举报
回复
引用 23 楼 wangyaninglm 的回复:
[quote=引用 22 楼 u013823973 的回复:]
size_t fib[] = {1,2,3,5,8,13,21,34};
	string str,tempstr;
	cin >> str;
	tempstr = str;
	auto it = unique(tempstr.begin(),tempstr.end());
	tempstr.erase(it,tempstr.end());

	for (auto itstr = str.begin(); itstr != str.end();)
	{
		string s(itstr,str.end());
		for (int i = 0; i < 8;i++)
		{
			if (fib[i] <= tempstr.size())
			{
				auto singlechar = tempstr[i];
				auto findchar = s.find(singlechar);
				for (auto itchar = s.begin() + findchar; itchar != s.end()&&*itchar == singlechar;itchar++)
				{
					if (*s.begin() == singlechar)
					{
						itstr++;
					}
					cout << string(s.begin(),itchar+1) << endl;
				}
			}
			else
			{
				tempstr.erase(tempstr.begin());
				break;
			}
		}
	}
求注释跟思想[/quote]
int _tmain(int argc,_TCHAR* argv[])
{
	size_t fib[] = {1,2,3,5,8,13,21,34};
	string str,tempstr;
	cin >> str;
	tempstr = str;
	auto it = unique(tempstr.begin(),tempstr.end());
	tempstr.erase(it,tempstr.end());	// 去重(已假定是有序的,如果无序则先排序)

	for (auto itstr = str.begin(); itstr != str.end();)	// 遍历输入数据
	{
		string s(itstr,str.end());	
		for (int i = 0; i < 8;i++)
		{
			if (fib[i] <= tempstr.size())	// 符合FIB的不同字符有多少,则输出多少次
			{
				auto singlechar = tempstr[i];
				auto findchar = s.find(singlechar);
				for (auto itchar = s.begin() + findchar; itchar != s.end()&&*itchar == singlechar;itchar++)
				{	// 输出,相同字符连续输出
					if (*s.begin() == singlechar)	// 每次去掉第一个相同的字符
					{
						itstr++;
					}
					cout << string(s.begin(),itchar+1) << endl;
				}
			}
			else
			{
				tempstr.erase(tempstr.begin());	// 字典输出需要
				break;
			}
		}
	}


	return 0;
}
老李家的小二 2015-04-28
  • 打赏
  • 举报
回复
引用 20 楼 wangyaninglm 的回复:
[quote=引用 16 楼 ligyu110 的回复:] 我能说:这是很恶心的面试题吗,能映射出公司的一些品质吗
引用 16 楼 ligyu110 的回复:
我能说:这是很恶心的面试题吗,能映射出公司的一些品质吗
这只是微软的第一个题[/quote] 孤陋寡闻啦,这样的斐波那契我也是醉了
shiter 2015-04-28
  • 打赏
  • 举报
回复
引用 22 楼 u013823973 的回复:
size_t fib[] = {1,2,3,5,8,13,21,34};
	string str,tempstr;
	cin >> str;
	tempstr = str;
	auto it = unique(tempstr.begin(),tempstr.end());
	tempstr.erase(it,tempstr.end());

	for (auto itstr = str.begin(); itstr != str.end();)
	{
		string s(itstr,str.end());
		for (int i = 0; i < 8;i++)
		{
			if (fib[i] <= tempstr.size())
			{
				auto singlechar = tempstr[i];
				auto findchar = s.find(singlechar);
				for (auto itchar = s.begin() + findchar; itchar != s.end()&&*itchar == singlechar;itchar++)
				{
					if (*s.begin() == singlechar)
					{
						itstr++;
					}
					cout << string(s.begin(),itchar+1) << endl;
				}
			}
			else
			{
				tempstr.erase(tempstr.begin());
				break;
			}
		}
	}
求注释跟思想
难题 2015-04-28
  • 打赏
  • 举报
回复
size_t fib[] = {1,2,3,5,8,13,21,34};
	string str,tempstr;
	cin >> str;
	tempstr = str;
	auto it = unique(tempstr.begin(),tempstr.end());
	tempstr.erase(it,tempstr.end());

	for (auto itstr = str.begin(); itstr != str.end();)
	{
		string s(itstr,str.end());
		for (int i = 0; i < 8;i++)
		{
			if (fib[i] <= tempstr.size())
			{
				auto singlechar = tempstr[i];
				auto findchar = s.find(singlechar);
				for (auto itchar = s.begin() + findchar; itchar != s.end()&&*itchar == singlechar;itchar++)
				{
					if (*s.begin() == singlechar)
					{
						itstr++;
					}
					cout << string(s.begin(),itchar+1) << endl;
				}
			}
			else
			{
				tempstr.erase(tempstr.begin());
				break;
			}
		}
	}
一根烂笔头 2015-04-27
  • 打赏
  • 举报
回复
果断放弃,珍爱生命,节约时间!
shiter 2015-04-27
  • 打赏
  • 举报
回复
引用 11 楼 tpnndhqc 的回复:
[quote=引用 9 楼 wangyaninglm 的回复:] 这道题的意思定义了一种LUCKY字符串,该字符串中不同字符的个数恰好为斐波拉契数列中的一个,需求是输入一个包含字符个数不超过100的字符串,找出其所有子字符串中符合LUCKY字符串特点的字符串并按照字典顺序打印出来。
感觉有问题啊,斐波那契数列是112358。。。还是0112358 若是前面的aabcd就不对啊 [/quote] 亲,看到翻译瞬间就懂了,那我多输出的aabcd,abcd就容易理解了啊,你判断一下输出的字符里面有几个不同字符,比如这个aabcd,abcd,就有4个不同字符!所以不是斐波那契数列中的不同字符个数值。判断一个数是不是斐波那契数列数请自行百度。[/quote] 上代码看看
shiter 2015-04-27
  • 打赏
  • 举报
回复
引用 11 楼 tpnndhqc 的回复:
[quote=引用 9 楼 wangyaninglm 的回复:] 这道题的意思定义了一种LUCKY字符串,该字符串中不同字符的个数恰好为斐波拉契数列中的一个,需求是输入一个包含字符个数不超过100的字符串,找出其所有子字符串中符合LUCKY字符串特点的字符串并按照字典顺序打印出来。
感觉有问题啊,斐波那契数列是112358。。。还是0112358 若是前面的aabcd就不对啊 [/quote] 亲,看到翻译瞬间就懂了,那我多输出的aabcd,abcd就容易理解了啊,你判断一下输出的字符里面有几个不同字符,比如这个aabcd,abcd,就有4个不同字符!所以不是斐波那契数列中的不同字符个数值。判断一个数是不是斐波那契数列数请自行百度。[/quote] 还是没懂题目要干啥
Sping 2015-04-27
  • 打赏
  • 举报
回复
引用 9 楼 wangyaninglm 的回复:
这道题的意思定义了一种LUCKY字符串,该字符串中不同字符的个数恰好为斐波拉契数列中的一个,需求是输入一个包含字符个数不超过100的字符串,找出其所有子字符串中符合LUCKY字符串特点的字符串并按照字典顺序打印出来。
感觉有问题啊,斐波那契数列是112358。。。还是0112358 若是前面的aabcd就不对啊 [/quote] 亲,看到翻译瞬间就懂了,那我多输出的aabcd,abcd就容易理解了啊,你判断一下输出的字符里面有几个不同字符,比如这个aabcd,abcd,就有4个不同字符!所以不是斐波那契数列中的不同字符个数值。判断一个数是不是斐波那契数列数请自行百度。
shiter 2015-04-27
  • 打赏
  • 举报
回复
引用 16 楼 ligyu110 的回复:
我能说:这是很恶心的面试题吗,能映射出公司的一些品质吗
引用 16 楼 ligyu110 的回复:
我能说:这是很恶心的面试题吗,能映射出公司的一些品质吗
这只是微软的第一个题
Sping 2015-04-27
  • 打赏
  • 举报
回复
膜拜楼上的大神,精简多了。 加点判断是不是斐波那契数列数的代码。

int fib(int a)
{
	if (a==0) 
		return 0;
	else if(a==1 || a==2) 
		return 1;
	else 
		return fib(a-1)+fib(a-2);
}
bool isfib(int m)
{
	int i=0,iFib;
	bool bFib = false;
	while(true)
	{
		iFib = fib(i);
		if (iFib < m)
		{
			i++;
		}
		else if (iFib == m)
		{
			bFib = true;
			break;
		}
		else
		{
			break;
		}
	}
	return bFib;
}
使用:if (isfib(ixx)){是}else{不是。。。}
fly_dragon_fly 2015-04-27
  • 打赏
  • 举报
回复
刚开始还以为枚举子串,结果只是按顺序的
#include<iostream>
#include <algorithm>
#include <set>
using namespace std;

string s;
set<string> result;
int fib[]={1, 2, 3, 5, 8, 13, 21, 34};
bool isfib(int i) {
    return *lower_bound(fib,fib+8,i)==i;
}

void sub(){
    for(int i=0;i<(int)s.length();i++){
        for(int j=i;j<(int)s.length();j++){
            set<char> dif;
            for(int k=i;k<=j;k++) dif.insert(s[k]);
            if(isfib(dif.size())) result.insert(string(&s[i],&s[j+1]));
        }
    }
    for(auto &k : result) cout<<k<<endl;
}

int main()
{
    while(cin>>s){
        result.clear();
        sub();
    }
}
难题 2015-04-27
  • 打赏
  • 举报
回复
伪代码: 1. 输入的字符串str 去重后得到str中有多少个不同的字符len 2. 把斐波那契数列中小于和等于len的所有数放入一个数组fib[]中 3. 循环打印str中属于fib[]中个数的字符串,注意:字典打印(这应该默认的输入应该也是按照字典来的,不然需要排序),一步一步完后移动str中的不同字符
老李家的小二 2015-04-27
  • 打赏
  • 举报
回复
我能说:这是很恶心的面试题吗,能映射出公司的一些品质吗
iamnothandsome 2015-04-27
  • 打赏
  • 举报
回复
嗯,嗯,这道算法题比较基础。。。我写个伪代码试一试啊。 首先是个输出字符串中不同字符数的函数,这个函数好写,复杂度应该是O(n) , 命名为int diffchar(string s){}; 然后写一个斐波那契数列的set ,命名为fibonacci 然后写的话嘛。。 for (int i = 0 ; i < s. length; i ++){ for (int j = i ; j < s. length; j++){ if (fibonacci.find(diffchar(s[i,j]))!=fibonacci.end()){ cout<< s[i,j]<<endl; } } }
gzwgyfgpf 2015-04-26
  • 打赏
  • 举报
回复
斐波那契数列里没4啊,样例输出却有abcd,是不是有点问题
shiter 2015-04-26
  • 打赏
  • 举报
回复
引用 7 楼 william7_138 的回复:
[quote=引用 1 楼 wangyaninglm 的回复:]
这道题的意思定义了一种LUCKY字符串,该字符串中不同字符的个数恰好为斐波拉契数列中的一个,需求是输入一个包含字符个数不超过100的字符串,找出其所有子字符串中符合LUCKY字符串特点的字符串并按照字典顺序打印出来。[/quote] 感觉有问题啊,斐波那契数列是112358。。。还是0112358 若是前面的aabcd就不对啊
fanlvlgh 2015-04-26
  • 打赏
  • 举报
回复
简单一点,就是列出所有包含质数(12357..)个不同字符的子字符串
william7_138 2015-04-25
  • 打赏
  • 举报
回复
引用 1 楼 wangyaninglm 的回复:
这道题的意思定义了一种LUCKY字符串,该字符串中不同字符的个数恰好为斐波拉契数列中的一个,需求是输入一个包含字符个数不超过100的字符串,找出其所有子字符串中符合LUCKY字符串特点的字符串并按照字典顺序打印出来。
shiter 2015-04-25
  • 打赏
  • 举报
回复
A Maximum-Flow Formulation of theN-camera Stereo Correspondence Problem
引用 5 楼 tpnndhqc 的回复:

#include "stdafx.h"
#include <string>
#include <map>  
#include <iostream> 
int main()
{
	string str;
	cin>>str;
	//多输出了aabcd,abcd,英语渣渣看不懂题目,你教我题目说的啥我应该就能写。。。
	map<string,int> imap;
	int length = str.length();
	int iCount = 0;
	for (int i=0;i!=length;i++)
	{
		char temp[32] = {0};
		string str_temp = str.substr(i);
		int templen = str_temp.length();
		for(int j=0;j!=templen;j++)
		{
			strncpy(temp,str_temp.c_str(),j+1);
			if (imap.find(temp)==imap.end())
			{
				iCount++;
				imap.insert(make_pair(temp,iCount));
				cout<<temp<<endl;
			}
		}
	}
	getchar();
	return 0;
}
google一下啊,有道词典,这个前面什么斐波那契数列跟字符咋扯上关系 的,我确实也是没懂
Sping 2015-04-24
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <string>
#include <map>  
#include <iostream> 
int main()
{
	string str;
	cin>>str;
	//多输出了aabcd,abcd,英语渣渣看不懂题目,你教我题目说的啥我应该就能写。。。
	map<string,int> imap;
	int length = str.length();
	int iCount = 0;
	for (int i=0;i!=length;i++)
	{
		char temp[32] = {0};
		string str_temp = str.substr(i);
		int templen = str_temp.length();
		for(int j=0;j!=templen;j++)
		{
			strncpy(temp,str_temp.c_str(),j+1);
			if (imap.find(temp)==imap.end())
			{
				iCount++;
				imap.insert(make_pair(temp,iCount));
				cout<<temp<<endl;
			}
		}
	}
	getchar();
	return 0;
}
加载更多回复(4)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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