2009/11

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

<< >>


スポンサーサイト

  • -
  • スポンサードリンク
  • -
  • -
  • pookmark

この広告は60日以上更新がないブログに表示されております。
新しい記事を書くことで広告を消すことができます。


http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/problem.jsp?vol=5&id=0506&tle=1&mle=32768&title=String&doc=1&lang=jp
の問題。cppにもなれなきゃねー。

string型にint型を代入するのには人手間かけないといけないのね。

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

using namespace std;

string itos( int i ) {
ostringstream s ;
s << i ;
return s.str() ;
}

int main(){

  string line,scount;
  string temp;
  int n;

  while(1){
  cin >> n;
  if(n==0)break;
  cin >> line;

  for(int i=0;i<n;i++){
   int  count = 1;
   
    for(int i=0; i<line.size();i++){
      if(line[i]==line[i+1])count ++;
      else{
    temp+=itos(count);
    count = 1;
    temp+=line[i];
      }
    }
   
    line = temp;
    temp.clear();
  }
 
  cout << line << endl;

  }
  return 0;

}


簡単だけど。
短く書いてみた。

今回  188 Byte
前Cで書いたとき 333 Byte

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/problem.jsp?vol=0&id=0006&tle=1&mle=32768&title=Reverse%20Sequence&doc=4&lang=jp


#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main(){
  string s;
  cin >> s;
  reverse ( s.begin(), s.end() );
  cout << s <<endl;
  return 0;  
}


更新も乏しいので、毎回サークルの活動報告を書くことにしよう。
土曜日は定期練習日なので。

今日はひたすらC++の勉強。コード打ち。

そしてsolvedを増やすために問題に喰いかかってみる。


http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/problem.jsp?vol=0&id=0067&tle=1&mle=32768&title=The%20Number%20of%20Island&doc=1&lang=jp
ぬー、終了条件がわからない。サンプルはOKだけど、これでは恐ろしくて提出できないな。

がむしゃらにコードを打つのはできるけど、まだデバックとかICPCのふるまいかた(?)が身に着いてないのかもしれない。



#include<stdio.h>

#define N 12
char field[N][N];
int visited[N][N];


void DFS(int i,int j){
  visited[i][j] = 1;

  if(0<=i-1 && i-1<N && 0<=j && j<N && field[i-1][j]==field[i][j] && visited[i-1][j] == 0){
    DFS(i-1,j);
  }
 
  if(0<=i && i<N && 0<=j+1 && j+1<N && field[i][j+1]==field[i][j] && visited[i][j+1] ==0 ){
    DFS(i,j+1);
  }
  if(0<=i+1 && i+1<N && 0<=j && j<N && field[i+1][j]==field[i][j]&& visited[i+1][j] == 0){
    DFS(i+1,j);
  }
  if(0<=i && i<N && 0<=j-1 && j-1<N && field[i][j-1]==field[i][j] && visited[i][j-1] == 0 ){
    DFS(i,j-1);
  }
 
}
int main(void){
 
  while(1){
    int i,j,count=0;

    for(i=0;i<N;i++){
      for(j=0;j<N;j++){
    scanf(" %c ",&field[i][j]);
    visited[i][j] = 0;
      }
    }
   
    for(i=0;i<N;i++){
      for(j=0;j<N;j++){
    if(visited[i][j] == 0 ){
      if(field[i][j]=='1'){
      DFS(i,j);
      count++;
      }
    }
      }
    }
    printf("%d¥n",count);

  }
  return 0;
}




 更新も乏しいので、毎回サークルの活動報告を書くことにしよう。
土曜日は定期練習日なので。

今日はひたすらC++の勉強。コード打ち。

そしてsolvedを増やすために問題に喰いかかってみる。


http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/problem.jsp?vol=0&id=0067&tle=1&mle=32768&title=The%20Number%20of%20Island&doc=1&lang=jp
ぬー、終了条件がわからない。サンプルはOKだけど、これでは恐ろしくて提出できないな。

がむしゃらにコードを打つのはできるけど、まだデバックとかICPCのふるまいかた(?)が身に着いてないのかもしれない。



#include<stdio.h>

#define N 12
char field[N][N];
int visited[N][N];


void DFS(int i,int j){
  visited[i][j] = 1;

  if(0<=i-1 && i-1<N && 0<=j && j<N && field[i-1][j]==field[i][j] && visited[i-1][j] == 0){
    DFS(i-1,j);
  }
 
  if(0<=i && i<N && 0<=j+1 && j+1<N && field[i][j+1]==field[i][j] && visited[i][j+1] ==0 ){
    DFS(i,j+1);
  }
  if(0<=i+1 && i+1<N && 0<=j && j<N && field[i+1][j]==field[i][j]&& visited[i+1][j] == 0){
    DFS(i+1,j);
  }
  if(0<=i && i<N && 0<=j-1 && j-1<N && field[i][j-1]==field[i][j] && visited[i][j-1] == 0 ){
    DFS(i,j-1);
  }
 
}
int main(void){
 
  while(1){
    int i,j,count=0;

    for(i=0;i<N;i++){
      for(j=0;j<N;j++){
    scanf(" %c ",&field[i][j]);
    visited[i][j] = 0;
      }
    }
   
    for(i=0;i<N;i++){
      for(j=0;j<N;j++){
    if(visited[i][j] == 0 ){
      if(field[i][j]=='1'){
      DFS(i,j);
      count++;
      }
    }
      }
    }
    printf("%d¥n",count);

  }
  return 0;
}




意気込んでは見たものの続いてないので最近の活動を報告してみようと思う。


●ICPC

ロベールさんを紐解きながらICPCで必須のC++を習得中。とりあえず2章まで読みすすめた。一つの絵エディタウィンドでコードを書いて確かめては消し、書いて消しを繰り返してます。まだCとほとんど変わらないので(オブジェクト思考までいってないからか)いい復習になってる気が。

C++と平行してRedCap君にお願いして「ICPCの2、3問目を解けるようになる問題」を課題として出してもらってるのでそれも解いてます。今はCutTheCake。


●その他

バンドでは1年生が入ってきたので新入生を交えたコンサートに向けて練習中。ベース楽しい。英語の会は復活したし、Orr先生の交流会にも申し込んだので本格的に英語の勉強を始めたい今日このごろ。秋にはTOEIC受けようかな。


こんな感じ。


 このブログ、凍結してたけど再開しようと思う。


mixiに書けないプライベートすぎることとか、大学のこととか、批判とか、ICPC(プログラミング)日記とか。あとこっちでフライヤーなどの作品も展示しよう。


基本的にこれからは日本語で。
英語のブログも友達と始めたのでイングリッシュはそっちで継続しようと思う。http://charcoal-masa.jugem.jp/



まただらけるかもしれませんが、末永く見ていて下さい。


 関数を使ってみた。
scanして1回出力で終了。

-----------------------------------------
#include<stdio.h>

int fanctional(int num){

     int i,account=num;

     for(i=num-1;i>0;i--)account=account*i;
     return account;
     }


int main(void){
 
  int n;

  scanf("%d",&n);
 
  printf("%d¥n",fanctional(n));

  return 0;
}



--------------------------------------------
なぜか通らない。。。


 memo memo ...

(これは並び替えの回数を表示するプログラム)


-----------------------------------------------

#include<stdio.h>

int main (void){

  int i, j, temp,ar[100],n;

  while(1){
    scanf("%d",&n);
    if(n==0)break;
   
    for(i=0;i<n;i++)scanf("%d",&ar[i]);
    int count=0;   

    for (i = 0; i <n-1; i++) {
      for (j =n-1; j > i; j--) {
        if (ar[j-1] > ar[j]) {
        temp = ar[j-1];
        ar[j-1] = ar[j];
        ar[j] = temp;
        count++;
        }
      }
    }

    printf("%d¥n",count);

  }
    return 0;
   
}
 

---------------------------------------------
bubble sort ってRPGの技名みたいだよね。



Cのアルゴリズムのメモを取ってきたいと思います。
さすがにここは日本語で。
ICPC部の問題中心に解いていきます。


あくまで初心者なので、成長記録もかねて。


-----------------------------------------------------
Simultaneous Equation

連立方程式     ax + by = c
               dx + ey = f

の解、x, y を出力して終了するプログラムを作成して下さい。
a, b, c, d, e, f はそれぞれ、 -1000 以上 1000 以下の実数
とし、連立方程式の解が一意に存在するように与えれれるもの
とします。 Input 複数のデータセットが与えられます。入力
の最後まで処理して下さい。1つのデータセットが1行に与え
られます。1つのデータセットに a, b, c, d, e, f が1つ
のスペースで区切られて与えられます。 Output 各データセッ
トに対して、x, y を1つのスペースで区切って1行に出力して
下さい。各値は小数点以下第3位まで出力して下さい。小数点
以下第4位を四捨五入して下さい。


Sample Input

1 2 3 4 5 6
2 -1 -2 -1 -1 -5

 
Output for the Sample Input

-1.000 2.000
1.000 4.000


-----------------------------------------------------

逆行列を使ってといてみました。
ライブラリって使っていいのかな。。。うまく通りませんでした。

memo:コンパイルはgcc hoge.c -lm

#include<stdio.h>
#include<math.h>

    int main (void){

        int a,b,c,d,e,f;
        double x,y,delta;

        scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);

        delta=1.0/(a*e-b*d);

        x=delta*(e*c-b*f);
        y=delta*(a*f-c*d);

        x=floor(x*1000+0.5)/1000;
        y=floor(y*1000+0.5)/1000;

        printf("%.3lf %.3lf¥n",x,y);
        return 0;
     }


  Question S001

  Why do you study English?  Use specific reason to support your answer. (If you can, write your answer's length as follows: speak all sentences by 45 sec without reading them. Of course, you have not to remember your answer completely when you speak)


A(Nov 10,2008)

 Because learning enable me to conversation various people. For example, I often take part in DJ events, where give me a chance to speak to foreign national people. There I can enjoy talking about each country's culture and background in English. To know each defference of culture is very interesting for me.