本文目錄一覽:
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/zh-hk/n/300303.html