php 邏輯訓練小題目三(附我的答案)
阿新 • • 發佈:2019-02-17
【程式31】
題目:將一個數組逆序輸出。
1.程式分析:用第一個與最後一個交換。
【程式32】
題目:取一個整數a從右端開始的4~7位。
程式分析:可以這樣考慮:
(1)先使a右移4位。
(2)設定一個低4位全為1,其餘全為0的數。可用~(~0<<4)
(3)將上面二者進行&運算。
【程式33】
題目:打印出楊輝三角形(要求打印出10行如下圖)
1.程式分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
【程式34】
題目:輸入3個數a,b,c,按大小順序輸出。
1.程式分析:利用指標方法。
【程式35】
【程式36】
題目:有n個整數,使其前面各數順序向後移m個位置,最後m個數變成最前面的m個數
【程式37】
題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下
的是原來第幾號的那位。
【程式38】
題目:寫一個函式,求一個字串的長度,在main函式中輸入字串,並輸出其長度。
【程式39】
題目:編寫一個函式,輸入n為偶數時,呼叫函式求1/2+1/4+...+1/n,當輸入n為奇數時,呼叫函式
1/1+1/3+...+1/n(利用指標函式)
題目:將一個數組逆序輸出。
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
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;
}