1. 程式人生 > >php 邏輯訓練小題目三(附我的答案)

php 邏輯訓練小題目三(附我的答案)

【程式31】
題目:將一個數組逆序輸出。 
1.程式分析:用第一個與最後一個交換。 

<?php
$arr=array("張氏","男",28,"本科");
$arr2=$arr;
for($i=0,$len=count($arr);$i<$len;$i++){
$arr[$i]=$arr2[$len-1-$i];
}
var_dump($arr);
?>


【程式32】 
題目:取一個整數a從右端開始的4~7位。 
程式分析:可以這樣考慮: 
(1)先使a右移4位。 
(2)設定一個低4位全為1,其餘全為0的數。可用~(~0<<4) 
(3)將上面二者進行&運算。 

main()
{
unsigned a,b,c,d;
scanf("%o",&a);
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%o\n%o\n",a,d);
}


【程式33】
題目:打印出楊輝三角形(要求打印出10行如下圖) 
1.程式分析: 

1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 

<?php

for($i=1;$i<=10;$i++){
   for($j=1;$j<=$i;$j++){
   $arr[$i][1]=1;
	   if($i==$j){$arr[$i][$j]=1;
	   echo $arr[$i][$j]."\t";}
	   else{
	   @$arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j];
	   echo $arr[$i][$j]."\t";
	   }
   }
   echo "<br/>";
}

?>


【程式34】 
題目:輸入3個數a,b,c,按大小順序輸出。 
1.程式分析:利用指標方法。 

</pre><pre name="code" class="cpp">main()
{
float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;} /*實現a和b的互換*/
if(a>c)
{t=a;a=c;c=t;} /*實現a和c的互喚*/
if(b>c)
{t=b;b=c;c=t;] /*實現b和c的互換*/
printf("%5.2f,%5.2f,%5.2f\n",a,b,c);
}



【程式35】 

題目:輸入陣列,最大的與第一個元素交換,最小的與最後一個元素交換,輸出陣列。 

$a=max($arr);
$b=min($arr);
$arr[array_search($b,$arr))]=max($arr);;
$arr[array_search($a,$arr))]=max($arr);;


【程式36】 
題目:有n個整數,使其前面各數順序向後移m個位置,最後m個數變成最前面的m個數 

#include "stdio.h"
#define N 7
main()
{
     int a[N]={1,2,3,4,5,6,7},b[N];
     int i,m,n,x;
     scanf("%d",&m);
     n=0;
     x=N;
     for(i=0;i<m;i++)
     {
         b[i]=a[x-1];
         x--;
     }
     for(i=N-m-1;i>=0;i--)
     {
         a[i+m]=a[i];
     }
     for(i=m-1;i>=0;i--)
     {
         a[n]=b[i];
         n++;
     }
     for(i=0;i<N;i++)
         printf("%d",a[i]);

}


【程式37】
題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下
的是原來第幾號的那位。 

<?php
   $arr=range(1,10);
   while(count($arr)>1){
     for($i=1;$i<3;$i++){
		   if(!next($arr)){reset($arr);}
		   if($i==2){
			   echo $arr[key($arr)];
		   unset($arr[key($arr)]);
		   }
	   
	 }
   }
   var_dump($arr);
?>


【程式38】 
題目:寫一個函式,求一個字串的長度,在main函式中輸入字串,並輸出其長度。 

strlen();


【程式39】 
題目:編寫一個函式,輸入n為偶數時,呼叫函式求1/2+1/4+...+1/n,當輸入n為奇數時,呼叫函式
1/1+1/3+...+1/n(利用指標函式) 

#include <stdio.h>
float sum1(int n);
float sum2(int n);
void main(){
    int n;
    scanf("%d",&n);
    float (*sum)(int n);
    if (n<1) {
    printf("輸入整數不在範圍");
    }
    else if(n%2==1){
    sum=sum1;
    printf("%f",sum(n));
    }
    else if(n%2==0){
    sum=sum2;
    printf("%f",sum(n));    
    }
}
float sum1(int n){
    float temp,sum;
    for(int i=1;i<=n;i++){
        if(i%2==1){
        temp=1.0/float(i);
        sum+=temp;
        }
    }
    return sum;
}
float sum2(int n){
    float temp,sum;
    for(int i=1;i<=n;i++){
        if(i%2==0){
        temp=1.0/float(i);
        sum+=temp;
        }
    }
    return sum;
}