#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);
}
}
次のコードでは、まずn
とk
を読み込んで「重複無しで」という条件を加え入れるためにi == j || j == k || i ==k
をif
の条件に入れる。組み合わせの数が分かればいいので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;
}