生半可な ど素人の パソコン資格 :)

趣味で、資格学修を しています。 自分に 出来ることを 増やしていきたいです ^^

よろしくお願いします。(^^)

こんにちは。

fuku です、皆さん いかが

お過ごしでしょうか。

熊本の 地震は 大変ですね。

一早い 復旧・復興を お祈りしています。

亡くなられた方たちの ご冥福を お祈りします。


今回の 記事なのですが、

例によって、極選 予想問題集より、

お伝えします。


小町算
 1, 2, 3, 4, 5, 6, 7, 8, 9
までの 数字を1個づつ 使って、
+, - で 合計を 100にします。
その 式を 出力します。

という、PGです。^^

以下に、作成した コードを

載せておきます。

ご参考になれば、幸いです :)



#include <stdio.h>
#include <string.h>

int main(){

int i;
int n;
int s;
int sign;
int ope[10];

for(i = 1; i<= 9; i++){
ope[i] = 0;}

while(ope[1] < 3){
  s = 0;
  n = 0;
  sign = 1;

    for(i = 1; i <= 9; i++){
      if(ope[i] == 0){
        n = n*10 + i;}
        else{
         s = s+ sign*n;
         n = i;
      if(ope[i] == 2){
         sign = 1;}
         else{
          sign = -1;}
        }
     }
 




s = s + sign*n;

 if(s == 100){
       for(i=1; i <= 9; i++){
          if(ope[i] == 1){
             printf("%s", "-");}
             else {
                  if(ope[i] == 2){
                       printf("%s", "+");}
                      }
     printf("%d", i);
                                        }
    printf("%s\n", "");
                      }



i = 9;
ope[i] = ope[i] + 1;
   while((i > 1) && (ope[i] == 3)){
       ope[i] = 0;
       i = i - 1;
       ope[i] = ope[i] + 1;}
   }
 }


ご参考までに。

 ( 寒いので、お体お気をつけ下さい :)

IMG_1040



 

こんにちは、

fuku です、皆さんいかが

お過ごしでしょうか。


昨日は、暖かかったですね。

今日は 一転、雪が 降っています。

カラフルな 天気なので、

体調には くれぐれも お気をつけ下さい。


ところで。

又、プログラムを

作成しました。^^


〈 裏返しゲーム。〉

3桁の 2進数 数字を

入力し、

パターンに 合わせて

変換、全部 0 0 0

又は、1 1 1 にするという、

手順を 示す PG です。

( 1 を表、 0 を裏と 仮定しました )


パターンが 見つかれば、

found = 1

となり、場所を

i

で、表します。

今回は、パターンは

1 0

で、設定しています。

見つかったら、

0 1

に 変換、

続きの 数字を

変換して、

全部 同じ 数字にします。

( 最短 1手、最長 2手で
出来るみたいです )


参考図書
基本情報技術者予想問題集 [ アイテック ]
 文字列の探索… p588


… (人工知能入門)
p21
3枚の コインの パズル

〈 裏表のある コインが3枚、一列に並んでいます。
今、隣り合う2枚のコインを 同時に裏がえす操作だけで、
ある並び方の コインを 全て 表または裏にする方法を 示してください。〉


ちょっと、コードが

冗長ですが、

もしあれでしたら、

改善してみてください。;)

( バグなど ありましたら、

ご連絡下さい )




#include <stdio.h>
#include <string.h>

int i;
int j;
int found;
int n,m;
int x;

char T[4];
char P1[3];

char TS[4];
char PS[4];
char S0[2] = "0";
char S1[2] = "1";

char TK[2];

int ptn();

void hant(int y){
TK[0] = T[2];
if((y == 0) && (strcmp(TK, S0)==0)){
TS[0] = T[0];
TS[1] = S1[0];
TS[2] = S1[0];
printf("Text = %s\n", TS);}

   if((y==0) && (strcmp(TK, S1)==0)){
   TS[0] = S0[0];
   TS[1] = S1[0];
   TS[2] = TK[0];
   printf("Text = %s\n", TS);
   TS[0] = S0[0];
   TS[1] = S0[0];
   TS[2] = S0[0];
   printf("Text = %s\n", TS);}

TK[0] = T[0];
if((y == 1) && (strcmp(TK, S1)==0)){
TS[0] = S0[0];
TS[1] = S0[0];
TS[2] = T[2];
printf("Text = %s\n", TS);}

   if((y==1) && (strcmp(TK, S0)==0)){
   TS[0] = TK[0];
   TS[1] = S0[0];
   TS[2] = S1[0];
   printf("Text = %s\n", TS);
   TS[0] = S1[0];
   TS[1] = S1[0];
   printf("Text = %s\n", TS);}

}

int main(){

strcpy(P1, "10");

scanf("%s", T);
int x = ptn();
printf("i = %d\n", x);
hant(x);

}


ptn(){

i = 0;
found = -1;
n = 2;
m = 1;

while((found == -1) && (i <= (n - m + 1))){
   j = 0;
   PS[0] = P1[j];
   TS[0] = T[i+j];
    while((j <= m) && (strcmp(TS, PS) == 0)){
    j = j + 1;
   PS[0] = P1[j];
   TS[0] = T[i+j];}

   if( j > m ){
   found = 1;}
 else{
   i = i + 1;
  TS[0] = T[i];}
}


if( found == -1 ){
   i = -1;}

printf("found = %d\n", found);
return i;

}

↑このページのトップヘ