网易云课堂 浙江大学-陈越、何钦铭-数据结构基础习题集(自测)

题目链接:http://www.patest.cn/contests/mooc-ds

【打印沙漏】

#include 
#include 
#include 
using namespace std;
int num[1000];
int main(){
	num[1]=1;
	int sum=0;
	int tmp=1;
	for(int i=1;i<32;i++){
		num[i+1]=num[i]+2*(2*(i+1)-1); //找到规律,将所有形状沙漏所需要的点存起来
	}
	int n;
	char ch;
	cin>>n>>ch;
	int ans=0,now;
	for(int i=1;i<32;i++){
		if(n>=num[i]&&n 并不需要输出的多余的空格 , 输出就错了
			//printf(" ");
		printf("\n");
	}
	for(int i=0;i
【素数对猜想】

#include 
using namespace std;
int prime[100010];
int num[100010];
int main(){
	int cnt=0;
	int n;
	cin>>n;
	for(int i=2;i<=n;i++){ //筛选素数
		if(!prime[i]){
			num[cnt++]=i; 
			for(int j=i*2;j
【数组元素循环右移问题】

#include 
using namespace std;
int num[110];
int main(){
	int n,m;
	cin>>n>>m;
	if(m>n) //特殊情况,右移的距离大于数组本身的长度,取余即可,因为右移本身距离数组不变
		m=m%n;
	for(int i=0;i>num[i];
	int sign=0;
	for(int i=n-m;i
【Have fun with numbers】

#include 
#include 
using namespace std;
int numb[23];
int numc[23];
int numd[23];
int main(){
	string num;
	cin>>num;
	int len=num.length();

	for(int i=len-1;i>=0;i--){
		numb[len-i-1]=num[i]-'0';
		numc[len-i-1]=num[i]-'0'; //因为要将*2 变成 相加,所以用2个数组同时以便后面进位
	}
	int sign=len;
	for(int i=0;i9){
			numb[i]=sum-10; //进位
			if(i==len-1){
				sign=len+1;
			}
			numb[i+1]+=1;
		}
		else {
			numb[i]=sum;
		}
	}
	if(sign==len+1){ //如果出现多进了一位,则不可能与之前的相同,至少多了一个元素
		cout<<"No"<=0;i--)
			cout<=0;i--)
			cout<
【复杂度,最大子列和问题1】

O(n)方法,用c++输入方法21ms,c语言 9ms

#include
using namespace std;
const int maxn= 100000;
int main(){
	int n;
	scanf("%d",&n);
	int thisSum,Max;
	thisSum=Max=0;
	int now;
	for(int i=0;iMax)
			Max=thisSum;
		if(thisSum<0)
			thisSum=0;
	}
	printf("%d\n",Max);
	return 0;
}
【复杂度2,Maximum Subsequence Sum】

题目较坑,要考虑 全是 负数,全是0 ,既有负数又有零的情况

#include
using namespace std;
typedef long long ll;
const long long maxn= 100000+10;
int main(){
	ll n;
	scanf("%lld",&n);
	ll thisSum,Max;
	thisSum=Max=0;
	ll st,stx,end;
	ll now;
	ll sign=0;
	ll start_i,end_i;
	ll flag=1;
	ll flag2=1;
	for(ll i=0;i=0) flag=0;
		if(!flag){
			if(now>0)
				flag2=0;
		}
		if(i==0)
		{
			st=now;end=now;stx=now;
			start_i=now;
		}
		if(i==n-1){
			end_i=now;
		}
		thisSum+=now;
		if(sign&&thisSum>0){
			stx=now;
			sign=0;
		}
		if(thisSum>Max){
			Max=thisSum;
			end=now;
			st=stx;
		}
		if(thisSum<0){
			thisSum=0;
			sign=1;
		}	
	}
	if(Max==0&&flag)
		printf("%lld %lld %lld\n",Max,start_i,end_i);
	else  if(!flag&&flag2)
		printf("0 0 0\n");
	else
		printf("%lld %lld %lld\n",Max,st,end);
	return 0;
}



转载于:https://www.cnblogs.com/chaiwenjun000/p/5320993.html

你可能感兴趣的:(网易云课堂 浙江大学-陈越、何钦铭-数据结构基础习题集(自测))