1.由0到4五个数字,组成5位数,每个数字用一次,但十位和百位不能为3(当然万位不能为0),输出所有可能的五位数。
#include<iostream>
using namespace std;
int main(){
int a,b,c,d,e,sum=0,count=0;
for(a=0;a<=4;a++){
for(b=0;b<=4;b++){
if(a==b||b==3)
continue;
for(c=0;c<=4;c++){
if(c==a||c==b||c==3)
continue;
for(d=0;d<=4;d++){
if(d==a||d==b||d==c)
continue;
for(e=1;e<=4;e++){
if(e==a||e==b||e==c||e==d)
continue;
for(int i=0;i<25;i++)
sum=e*10000+d*1000+c*100+b*10+a;
cout<<sum<<endl;
count++;
}
}
}
}
}
cout<<"一共有"<<count<<"个"<<endl;
return 0;
}
2. 最大子段和问题。给定由n个整数组成的序列,求序列中子段的最大和,若所有整数均为负整数时定义最大子段和为0。
例如, 当(a1,a2,a3,a4 ,a5,a6) = (-2,11,-4,13,-5,-2)时,最大子段和为: a2+a3+a4=20
输入格式:
第一行输入整数个数n(1≤n≤10000),再依次输入n个整数。
输出格式:
输出第一行为最大子段和,第二行为子段第一个数和最后一个数在整个序列中的位序。
输入样例1:
6
-2 11 -4 13 -5 -2
输出样例1:
20
2 4
#include<iostream>
using namespace std;
int main()
{
int n,x=0,y=0;
int max=0;
int sum=0;
int b[1000];
cin>>n;
for(int i=1; i<=n; i++)
cin>>b[i];
for(int i=1; i<=n; i++)
{
sum=b[i];
if(sum>=max)
max=sum;
for(int j=i+1; j<=n; j++)
{
sum=sum+b[j];
if(sum>max){
max=sum;
x=i;y=j;
}
}
sum=0;
}
cout<<max<<endl;
cout<<x<<" "<<y;
return 0;
}