※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「AOJ241~250」の編集履歴(バックアップ)一覧に戻る

AOJ241~250 - (2012/07/11 (水) 14:36:44) の編集履歴(バックアップ)


0241 Quaternion Multiplication

四元数が2つ与えられるので積を計算して返せという問題。
マトリックスに対応表を作れば難しい式を書かなくて済みます。
4元数の式を再帰下降構文解析で解釈し計算結果を出力せよという問題を出されたら100%解く自信がない。


#include<stdio.h>
#include<math.h>
#include<string.h>
//1=0,i=1,j=2,k=3,
//-1=4,-i=5,-j=6,-k=7の対応表
int set[4][4]={	{0,1,2,3},
	{1,4,3,6},
	{2,7,4,1},
	{3,2,5,4}};
void calc(){
//1,i,j,k,-1,-i,-j,-kに分けて集計する
int ans[8],k1[4],k2[4];
memset(ans,0,sizeof(ans));
for(int i=0;i<4;i++)scanf("%d",&k1[i]);
for(int i=0;i<4;i++)scanf("%d",&k2[i]);
for(int i=0;i<4;i++){
	for(int j=0;j<4;j++){
		ans[set[i][j]]+=k1[i]*k2[j];
	}
}
//分けた分を整えて出す
for(int i=0;i<4;i++)printf("%s%d",i==0?"":" ",ans[i]-ans[4+i]);
printf("\n");
}
void setData(int n){
while(n--)calc();
}
int main(){
int n;
while(1){
	scanf("%d",&n);
	if(n==0)break;
	setData(n);
}
}