ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

鼻マーガリンコミュの私事です。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
8−2

[実行結果]
[07mi186@07mi186 pro3]$ ./ex0802-07mi186
| sequential search | binary search
-------|------------------------|-------------------
count | max min avg | max min avg
10 | 10 1 5 | 4 1 2
100 | 100 1 50 | 7 1 5
1000 | 1000 1 500 | 10 1 8
10000 | 10000 1 5000 | 14 1 12


[感想]
(なくてもよい)
*/
#include <stdio.h>

int count=0;/*カウント用外部変数*/

int binsearch(int A[],int lft,int rgt,int key){
int m;
while(lft<=rgt){
count++;
m=(lft+rgt)/2;
if (key<A[m]) rgt=m-1;
else if(key>A[m]) lft=m+1;
else return m;
}
return -1;
}

int seqSearch(int A[],int n,int key){
int i;
for(i=0;i<n;++i){
count++;
if(A[i]==key)break;
}
}

int main(void){
int N,i,j;
int A[10000];
int smax,smin,savg;
int bmax,bmin,bavg;
for(i=0;10000>i;++i)
A[i]=i;
printf(" | sequential search | binary search \n");
printf("-------|------------------------|-------------------\n");
printf(" count | max min avg | max min avg\n");

for(i=10;10000>=i;i=i*10){
savg=smax=0;
smin=100000;
for(j=0;j<i;++j){
count=0;
seqSearch(A,i,j);
savg+=count;
if(count>smax)
smax=count;
if(count<smin)
smin=count;
}
savg=savg/i;

bavg=bmax=0;
bmin=10000;
for(j=0;j<i;++j){
count=0;
binsearch(A,0,j,i);
bavg+=count;
if(count>bmax)
bmax=count;
if(count<bmin)
bmin=count;
}
bavg=bavg/i;
printf(" %5d | %5d %5d %5d | %5d %5d %5d \n",i,smax,smin,savg,bmax,bmin,bavg);
}
return 0;
}

コメント(1)

int ans[255];/*分割結果を格納する外部変数*/

void putans(int n){
/*外部変数、配列ansに格納された値を表示する*/
int i;
for(i=0; i<n-1; ++i)
printf("%d + ",ans[i]);
printf("%d\n",ans[n-1]);
}

int part(int total, int min, int divNum){
int sub;
int cnt = 0;
if(total==0){
putans(divNum);
cnt = 1;
}else{
for(sub=min; sub<=total; sub++){
ans[divNum] = sub;
cnt += part(total-sub,sub+1,divNum+1);
}
}
return cnt;
}

int main(void){
int n;
printf("n: ");
scanf("%d",&n);
printf("total number = %d\n",part(n,1,0));
return 0;
}

#include<stdio.h>
#define NYet 0
#define Done 2
#define MaxX 10
#define MaxY 10

int sX,sY;
int place[MaxX+2][MaxY+2];
int pathnum(int x,int y){
/*(x,y)から右上へ行く経路の総数を求める*/
int num;
if(x==sX && y==sY) return 1;
/*1つの経路が見付かった*/

if(place[x][y] == Done) return 0;
/*通過済点:それ以上試さない*/
++place[x][y];
/*未通過点、さらに試してみる*/
num = pathnum(x+1,y) + pathnum(x,y+1) + pathnum(x-1,y) + pathnum(x,y-1);
--place[x][y];
return num;
}

int main(void){
int i,j;
/*格子数を設定*/
printf("sX: ");
scanf("%d",&sX);
printf("sY: ");
scanf("%d",&sY);

/*格子点を未通過にする(初期化)*/
for(i=1;i<=sX;i++){
for(j=1;j<=sY;j++){
place[i][j] = NYet;
}
}

/*格子点の外側を通過済にする進路可能判定を簡単にするため*/
for(i=1;i<=sX;i++){
place[i][0] = place[i][sY+1] = Done;
}
for(i=1;i<=sY;i++){
place[0][i] = place[sX+1][i] = Done;
}

printf("number of paths in %d x %d rectangle: %d\n",sX,sY,pathnum(1,1));
return 0;
}
int ans[255];

void putans(int n){
int i;
for(i=0; i<n-1; ++i)
printf("%d^2 + ",ans[i]);
printf("%d^2\n",ans[n-1]);
}

int part(int total,int min,int divNum){
/*数totalをmin以上の数での分割方法の数*/
int sub;
int cnt=0;
if(total==0){
putans(divNum);
cnt=1;
}else{
for(sub=min;sub*sub<=total;sub++){
ans[divNum]=sub;
cnt+=part(total-sub*sub,sub+1,divNum+1);
}
}
return cnt;
}

int main(void){
int n;
printf("n: ");
scanf("%d",&n);
printf("total number = %d\n",part(n,1,0));
return 0;
}

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

鼻マーガリン 更新情報

鼻マーガリンのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング