2014年2月6日 星期四

程式練習:輸入數列,判定等差、等比…

大叔程式很弱…只能透過不斷練習簡單題目慢慢加深實力…

方法:
int MATH::Math_finalmath(int s, ...)
{

//處理載入多少數值
int count=0; //計算總共進來多少值
int now_math=s; //從s開始載入,目前的值
va_list List; //建立列表清單
va_start(List,s); //塞入List清單,從start開始
while (now_math != -1) //載入到最後一碼為-1
{
count++;
now_math=va_arg(List,int); //塞入清單,為int值
}
va_end(List); //關閉列表

int *a_p=new int[count]; //建立輸入值的陣列大小
now_math=s; //從s開始載入,目前的值
count=0;
va_list N_l; //建立列表清單
va_start(N_l,s); //塞入List清單,從start開始
while (now_math != -1) //載入到最後一碼為-1
{
a_p[count]=now_math;
now_math=va_arg(N_l,int); //塞入清單,為int值
count++;
}
va_end(N_l); //關閉列表

int add_p=a_p[1]-a_p[0]; //等差
int mul_p=a_p[1]/a_p[0]; //等比
int result=0; //結果 1:不是等差 2:不是等比 3:二者都不是 4:是等差 5:是等比 6:既是等差也是等比
int final_ans=0,final_ans2=0; //最終結果
for (int i=2;i<count;i++)
{
int temp=a_p[i]-a_p[i-1];
if (temp!=add_p) //如果不是等差的話
{
result=1;
break;
}
result=4;
}

for (int i=2;i<count;i++)
{
if (a_p[i-1]*mul_p!=a_p[i])
{
if (result==1)
result=3; //二者都不是
break;
}
}
if (result==4)
result=6; //等差而且也是等比
else if (result==1)
result=5; //僅等比

switch (result)
{
case 4:
final_ans=a_p[count-1]+add_p;
break;
case 5:
final_ans2=a_p[count-1]*mul_p;
break;
case 6:
final_ans=a_p[count-1]+add_p;
final_ans2=a_p[count-1]*mul_p;
break;
}
delete a_p; //歸還記憶體
if (result<4)
return result;
else
if (final_ans!=0)
if (final_ans2!=0)
return final_ans,final_ans2;
else
return final_ans;
else
return final_ans2;
}

主迴圈:

int main()
{
//■■■■■■■■■■■■■■■■
//■■■  等差、等比推斷式 ■■■
//■■■■■■■■■■■■■■■■
int ans_1=M_p->Math_finalmath(1,2,4,8,-1);//可自行新增,最後一位必填-1
int ans_2=M_p->Math_finalmath(2,4,8,16,-1);//可自行新增,最後一位必填-1
if (ans_1>3) //有結果
{
printf("第5位數為:%d\n",ans_1);
}
else
{
switch (ans_1)
{
case 1:
printf("不是等差\n");
break;
case 2:
printf("不是等比\n");
break;
case 3:
printf("不是等差也不是等比\n");
break;
}
}

if (ans_2>3) //有結果
{
printf("第5位數為:%d\n",ans_2);
}
else
{
switch (ans_2)
{
case 1:
printf("不是等差\n");
break;
case 2:
printf("不是等比\n");
break;
case 3:
printf("不是等差也不是等比\n");
break;
}
}

system("pause");
return 0;
}

沒有留言:

張貼留言