LoginSignup
0
0

More than 3 years have passed since last update.

AOJのプログラミング入門~#8

Last updated at Posted at 2020-05-12

20200510

・AOJのチュートリアル

Official House

配列使えるようになりましょうね、という目的

by Iceman

int main()
{
    int N,B,F,R,V,A[5][4][11]={0},i,j,k;
    for(scanf("%d",&N);N--;)
    {
        scanf("%d%d%d%d",&B,&F,&R,&V);
        A[B][F][R]+=V;
    }
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=3;j++)
            for(k=1;k<=10;k++)
                printf(" %d%s",A[i][j][k],k==10?"\n":"");
        if(i<4)
        puts("####################");
    }
    return 0;
}

How many ways?

1 から n までの数の中から、重複無しで3つの数を選びそれらの合計が x となる組み合わせの数を求めるプログラム。ぱっと頭では思いつかなかった。

by Iceman

#include<stdio.h>
int main()
{
    int N,X,i,j,k,r;
    for(;scanf("%d%d",&N,&X),X+N;printf("%d\n",r))
    {
        for(i=1,r=0;i<=N;i++)
            for(j=i+1;j<=N;j++)
            {
                k=X-i-j;
                if(j<k&&k<=N)
                    r++;
            }
    }
    return 0;
}

by kyopro_friends

#include<stdio.h>

int main(){
    int n,m;
    while(scanf("%d%d",&n,&m),n){
        int ans=0;
        for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){
            int k=m-i-j;
            if(j<k&&k<=n)ans++;
        }
        printf("%d\n",ans);
    }
}

次のコードでは、まずnkを読み込んで「重複無しで」という条件を加え入れるためにi == j || j == k || i ==kifの条件に入れる。組み合わせの数が分かればいいのでbを出力する。

by S1230149

#include <stdio.h> 

int main() {
  int n,x;
  int b,i,j,k,a;

  while(1) {
    scanf("%d %d",&n,&x);   
    b = 0;
    if( n == 0 && x == 0){
      break;
    }
    for(k = 1; k <= n ; k++) {


      for(j = 1; j <= n ; j++) {

    for(i = 1; i <= n; i++) {

      if(i == j || j == k || i ==k) {

      }else{
        a = i + j + k;
        if(a == x) {

          b += 1;

        }
      }

    }//i

      }//j

    }//k
    printf("%d\n",b/6);
  }


  return 0;
}  


Sum of Numbers

プログラムで文字を扱う方法、各桁の和。scanf("%s", num);で読み込んで各桁を``

by legosuke

#include<stdio.h>

int main(void)
{
    char num[1001];
    int sum, i;

    while(1) {
        sum=0;
        scanf("%s", num);
        if(num[0]=='0') break;
        for(i=0; num[i]!='\0'; i++) {
            sum+=num[i]-'0';
        }
    printf("%d\n", sum);
    }

    return 0;
}

Counting Characters

与えられた英文に含まれる、各アルファベットの数を数えるプログラム。scanf("%c",&c[i])!=EOFで判定。

by T1610

#include <stdio.h>

int main(){
  char c[1201];
  int i;
  int ans[26];
  int b=1;
  for(i=0; i<26; i++)ans[i]=0;
  i=0;
  while(scanf("%c",&c[i])!=EOF){
      if(c[i]>='a'&&c[i]<='z')ans[c[i]-'a']++;
      if(c[i]>='A'&&c[i]<='Z')ans[c[i]-'A']++;
      i+=1;
  }
  for(i=0; i<26; i++)printf("%c : %d\n",'a'+i,ans[i]);
  return 0;
}

Ring

リング状の文字列sの任意の位置から、時計回りに連続した文字をいくつか選んで、文字列pが作れるかを判定するプログラム。if(s[(i+j)%sn] != p[j])はわからん。

by TKT29

#include <stdio.h>

int main(void){
  char s[101],p[101];
  int i,j,sn=0,pn=0,t;

  scanf("%s %s",s,p);

//文字数カウント
  while(s[sn] != '\0') sn++;
  while(p[pn] != '\0') pn++;

  for(i=0;i<sn;i++){
    t=1;
    for(j=0;j<pn;j++)
      if(s[(i+j)%sn] != p[j]) t=0;
    if(t) break;
  }

  if( t )
    printf("Yes\n");
  else
    printf("No\n");

  return 0;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0