本文目录一览:
c语言程序
int suma=0,sumb=0,i,j;
第一种
for(i=1;i=100;i++){
suma=suma+i;
i=i+1;
sumb=sumb+i;
}
第二种
for(i=1;i=99;i=i+2){
suma=suma+i;
}
for(j=2;j=100;j=j+2){
sumb=sumb+j;
}
第三种
for(i=1;i=99;i=i+2){
suma=suma+i;
}
sumb=suma+50;
C语言求几个数和
没想到这道题还挺有难度的,看起来不怎么样,还花了我几小时时间。暂时写出一个程序,可以得出结果,但是不能给出两边的数如何分。等我想到再告诉楼主,下面是代码,经过很多组数据测试,均无问题:
#include iostream
using namespace std;
//冒泡排序,整理数组顺序
void mpSort(int* arr,int size)
{
bool flag = true;
for(int i = 0; i size -1; i++)
{
for(int j = 0; j size – 1 – i; j++)
{
if(arr[j] arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
flag = false;
}
}
if(flag)
{
break;
}
}
}
//求数组所有数的和
int GetTotal(int* input, int size)
{
int total = 0;
for(int i = 0; i size; i++)
{
total += input[i];
}
return total;
}
//判断是否可以将数组最大数拆分成倒数第二个数以及另外一个数
bool divideNum(int* input, int size, int total)
{
//取一半值,如果是小数,取较大的整数
int half = total / 2;
if(half total/2.f)
{
half++;
}
//如果最后两个值不等于总和的一半,则返回真,表示允许拆分最大数
if(input[size-1] + input[size-2] != half)
{
return true;
}
return false;
}
//求最大积函数
int MaxSum(int* input, int size)
{
int SameSum = 0;
mpSort(input,size);
int total = 0;
int temp = 0;
while(size 2)
{
total = GetTotal(input,size);
//如果允许拆分最大数,则拆分
if(divideNum(input,size,total))
{
temp = input[size-1] – input[size-2];
SameSum += input[size-2];
input[size-2] = temp;
size–;
mpSort(input,size);
}
else
{
return (input[size-1]+input[size-2]+SameSum)*(total-input[size-1]-input[size-2]+SameSum);
}
}
return (input[0]+SameSum)*(input[1]+SameSum);
}
//用户输入
void GetInput()
{
int* input = new int[21]();
int index = 0;
cout”请输入数字,最后输入-1结束输入,要退出程序请直接输入-1:”endl;
while(true)
{
cininput[index++];
if(input[index-1] == -1)
{
if(index == 1)
{
exit(0);
}
break;
}
}
for(int i = 0; i index-1; i++)
{
coutinput[i]” “;
}
coutendl;
cout”最大乘积结果为:”MaxSum(input,index-1)endl;
delete[] input;
}
int main()
{
while(true)
{
GetInput();
}
return 0;
}
补充:
全排列是不可取的,你知道20个数全排列有多少种么?那绝对不是几分钟之内可以做出来的。我的程序哪里有问题呢,麻烦楼上指下。我已经测试过数据,不是空写的。
你说的不会是main函数里的参数吧?那个去掉就可以。我是在VC++里编译的。
C语言 输入10个数,统计正数,负数及零的个数并输出正数累加和与个数累加和
main()
{ int a,i,j,k,suma,sumb;
b=0;/*b用来统计输入数据的个数*/
i=j=k=0; /*i,j,k分别用来统计正数,负数和零的个数*/
suma=sumb=0; /*suma,sumb分别用来计算正数和负数的和*/
do{ /*循环体的内容是输入数据后,判断再累加*/
scanf(“%d”,a);
if(a0) {i++; suma+=a;} /*正数*/
else if(a0) { j++; sumb+=a; } /*负数*/
else k++; /*零*/
} while(++b10); /*循环控制10次*/
printf(“zhengshu is %d ge ,the sum is %d\n”,i,suma); /*输出*/
printf(“fushu is %d ge ,the sum is %d\n”,j,sumb);
printf(“0 is %d ge \n”,k);
}
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/300303.html