顯示具有 ITSA 標籤的文章。 顯示所有文章
顯示具有 ITSA 標籤的文章。 顯示所有文章

2013年1月1日 星期二

2013編譯娘

21
#include<stdio.h>
#include "stoprun.c"
int dx(int x, int a[], int n){
int sum=0,i,j,r=1;
for(i=n-2,j=1;i>=0;i--,j++){
sum+=a[i]*j*r;
r*=x;
}
return sum;
}
main(int argc, char *argv[]){
 stoprun();
 int x, n;
 for(;;){
  if(scanf("%d%d", &x, &n)<0) break;
  int a[n],i;
for(i=0;i<n;i++) scanf("%d",&a[i]);
  printf("%d\n", dx(x,a,n));
 }
}
22
#include<stdio.h>
#include "stoprun.c"
main(int argc, char *argv[]){
 stoprun();
int n,i,sum=0,score;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&score);
sum+=score;
}
printf("Total score is %d\n",sum);
printf("Float average is %f\n",sum*1.0/n);
printf("Integer average is %d\n",sum/n);
sum=(sum*1.0/n*10+5)/10;
printf("Rounded Integer average is %d\n",sum);
}
23
#include<stdio.h>
#include "stoprun.c"
int getprime(int,int[]);
main(int argc, char *argv[]){
 stoprun();
 int n;
 int prime[200],x;
 scanf("%d", &n);
 int no=getprime(n,prime);
 for(x=0;x<no;++x) {
  printf("prime[%d]=%d\n",x,prime[x]);
 }
}
int getprime(int num, int p[]) {
int i,j,m,nc=0;
for(i=2;i<=num;i++){
for(j=2,m=1;j<i;j++)
if(i%j==0) m=0;
if(m) p[nc++]=i;
}
return nc;
}
24
#include<stdio.h>
#include "stoprun.c"
void int2decimal(int,char[]);
main(int argc, char *argv[]){
 stoprun();
 int number;
 char decimal[32];
 for(;;) {
  if(scanf("%d", &number)<0) break;
  int2decimal(number,decimal);
  printf("Decimal(%d)=\"%s\"\n",number,decimal);
 }
}
void int2decimal(int n,char d[]){
int i=0,j;
if(n==0) d[i++]='0';
while(n){
if(i%4==3)d[i++]=',';
d[i]=n%10+'0',n/=10;
i++;
}
d[i]='\0';

for(--i,j=0;j<i;j++,i--){
int t;
t=d[i],d[i]=d[j],d[j]=t;
}
}
25
#include<stdio.h>
#include "stoprun.c"
void calendar(int fday,int days)
{
printf("| S  M  T  W  T  F  S|\n");
printf("|--------------------|\n|");
int i;
for(i=0;i<fday+days;i++){
if(i%7==0&&i!=0) printf("|\n|");
else if(i!=0) printf(" ");
if(i<fday) printf("  ");
else printf("%2d",i-fday+1);
}
while(i%7!=0) printf("   "),i++;
printf("|\n|--------------------|\n");
}
main(int argc, char *argv[]){
 stoprun();
 int year, month, week;
 scanf("%d%d%d", &year, &month, &week);
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(year%4==0&&year%100!=0||year%400==0) m[1]=29;
int days=m[month-1];
year-=1911;
 printf("|*******%03d-%02d*******|\n", year, month);
 calendar(week, days);
}

2012年12月24日 星期一

ITSA20

 
#include<stdio.h>
int main(){
    int n,i,j,cas=1;
    while(scanf("%d",&n)!=EOF){
        long long s[20],max=0,tmp;
        for(i=0;i<n;i++) scanf("%lld",&s[i]);
        for(i=0;i<n;i++){
            tmp=1;
            //max=(max<tmp)? tmp:max;
            for(j=i;j<n;j++){
                tmp*=s[j];
                max=(max<tmp)? tmp:max;
            }
        }
        printf( "Case #%d: The maximum product is %lld.\n\n", cas++, max );
    }
return 0;
}

ITSA19

 
#include<stdio.h>
int main(){
    long long x,fun[200000];
    char str[200000];
    while(~scanf("%lld",&x)){
        int top=0,num=0,i,j,op=1;
        getchar();
        gets(str);
        for(i=0;str[i];i++){
            if(str[i]!=' '){
            if(str[i]=='-') op=-1,i++;
                num*=10;
                num+=str[i]-'0';
            }
            else{
                fun[top++]=num*op;

                num=0;
                op=1;
            }
        }
        fun[top++]=num*op;
        long long sum=0,r=1;
        for(i=top-2,j=1;i>=0;j++,i--){
            sum+=j*fun[i]*r;
            r*=x;
        }
        printf("%lld\n",sum);
    }
return 0;
}

ITSA18

 
#include<stdio.h>
int main(){
int n,a=0,b=1,c=1,fib[20000],top=0;
while(c<=100000000){
fib[top++]=c;
c=a+b;
a=b;
b=c;
}
scanf("%d",&n);
while(n--){
    int num,i;
    scanf("%d",&num);
    printf("%d = ",num);
    for(i=top-1;fib[i]>num;i--);
    while(i>0){
        if(num-fib[i]>=0){
                printf("1");
                num-=fib[i];
        }
        else
        printf("0");
        i--;
    }
    printf(" (fib)\n");
}
return 0;
}

ITSA17

 
#include<stdio.h>
int main(){

int n;
    while(scanf("%d", &n)&&n){

    int i;
    int count=0;
    printf("%d : ",n);
    for(i=2;i<=n;i=i+1)
    {
      if(n%i==0)
      {
        while(n%i==0)
        {
          n=n/i;

        }
        count=count+1;
      }
    }

     printf("%d\n", count);
    }
return 0;
}

ITSA16

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

void solve(int o[], int base) {
    int a[500] = {};
    int i, j, k, len;
    int cnt = 0;
    len = 299;
    while(o[len] == 0)  len--;
    do {
        for(i = 0, j = len; i < j; i++, j--)
            if(o[i] != o[j])
                break;
        if(i >= j)
            break;
        cnt++;
        for(i = 0; i <= len; i++)
            a[i] = o[i]+o[len-i];
        for(i = 0; i <= len+10; i++) {
            if(a[i] >= base) {
                a[i+1] += a[i]/base;
                a[i] %= base;
            }
            o[i] = a[i];
        }
        len += 10;
        while(o[len] == 0)  len--;
    } while(1);
    printf("%d", cnt);
}
int main() {
    char s[105];
    while(scanf("%s", &s) == 1) {
        int i, j, k, len = strlen(s), base = 0;
        for(i = 0; i < len; i++) {
            if(s[i] <= '9')
                s[i] -= '0';
            else
                s[i] -= 'A'-10;
            if(s[i] > base)
                base = s[i];
        }
        if(base == 0)   base = 1;
        for(i = 15; i > base; i--) {
            if(i != 15) printf(" ");
            int o[500] = {};
            for(j = len-1, k = 0; j >= 0; j--, k++)
                o[k] = s[j];
            solve(o, i);
        }
        for(i = base; i >= 2; i--) {
            if(i != 15) printf(" ");
            printf("?");
        }
        puts("");
    }
    return 0;
}

ITSA15

 
#include <stdio.h>
int main()
{
    int T, m, n, q, x, y, i;
    char map[101][101];
    scanf("%d", &T);
    while(T--){
        scanf("%d%d%d", &m, &n, &q);
        for(i = 0; i < m; i++)
            scanf("%s", map[i]);
        printf("%d %d %d\n", m, n, q);
        while(q--){
            scanf("%d%d", &x, &y);
            for(i = 1; ; i++){
                int xx = x-i, yy = y-i, dx = x+i, dy = y+i, judge = 0;
                if(xx < 0 || yy < 0 || dx >= m || dy >= n)    {printf("%d\n", 2*i-1); break;}
                for(int a = xx; a < xx+i*2+1 && !judge; a++)
                    for(int b = yy; b < yy+i*2+1 && !judge; b++)
                        if(map[a][b] != map[x][y])   judge = 1;
                if(judge)   {printf("%d\n", 2*i-1); break;}
            }
        }
    }
    return 0;
}

ITSA14

 
#include<stdio.h>
int main(){
int ch[200],ans[200],top=0,i,j;
char c;
for(i=0;i<200;i++) ch[i]=0;
while((c=getchar())!=EOF){
    if(c=='\n'){
        for(i=0;i<200;i++)
            if(ch[i]!=0)
                ans[top++]=i;;
        for(i=0;i<top;i++)
            for(j=i;j<top;j++)
                if(ch[ans[i]]>=ch[ans[j]]){
                    int t;
                    t=ans[i],ans[i]=ans[j],ans[j]=t;
                }
        for(i=0;i<top;i++)
            printf("%X %d\n",ans[i],ch[ans[i]]);
        puts("");
        for(i=0;i<200;i++) ch[i]=0;
        top=0;
    }
    else{
        ch[c]++;
    }
}

return 0;
}


//21 - 7f = 5E =94

ITSA13

 
#include<stdio.h>
int main(){
int n,m,i,x1,y1,x2,y2,cas=0;
int lx,ly,rx,ry;
scanf("%d",&n);
while(n--){
    scanf("%d",&m);

    scanf("%d %d %d %d",&lx,&ly,&rx,&ry);
    for(i=1;i<m;i++){
        scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
        if(x1>lx) lx=x1;
        if(y1>ly) ly=y1;
        if(x2<rx) rx=x2;
        if(y2<ry) ry=y2;
    }
    if((rx-lx)<0||(ry-ly)<0)
    printf("Case %d: 0\n",++cas);
    else
    printf("Case %d: %d\n",++cas,(rx-lx)*(ry-ly));
}
return 0;
}

ITSA12

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

ITSA11

#include<stdio.h>
#include<stdlib.h>
int main(){
int n;
while(scanf("%d",&n)==1){
    if(n==0) break;
    while(n>=10){
        int sum=0;
        while(n!=0){
            sum+=n%10;
            n/=10;
        }
        n=sum;
    }
    printf("%d\n",n);
}
return 0;
}

ITSA10

 
 #include<stdio.h>
int main(){
char c;
while((c=getchar())!=EOF){

    if(c=='<') {
        while(c!='>') c=getchar();
    }
    else if(c==' '||c=='\t'||c=='\n')
        ;
    else{
        printf("[");
        while(c!='<'){
        putchar(c);
        c=getchar();
        }
        printf("]\n");
        while(c!='>') c=getchar();
    }
}
return 0;
}
老師解法(有去尾部空白)
 
#include<stdio.h>
#include <stdlib.h>
main()
{
 char line[1024];
 int idx;
 int state;
 int c;
 state=0;
 while((c=getchar())!=EOF){
  if(state==0){
   if(c=='<'){
    state=1;
   }
   else{
    if(c!=' '&&c!='\n'&&c!='\t'){
     state=2;
     idx=0;
     line[idx++]=c;
    }
   }
  }
  else if(state==1){
   if(c=='>'){
    state=0;
   }
  }
  else if(state==2){
   if(c=='<'){
    for(idx--;line[idx]==' '||line[idx]=='\n'||line[idx]=='\t';idx--);
    line[idx+1]='\0';
    printf("[%s]\n", line);
    state=1;
   }else line[idx++]=c;
  }
 }
}



ITSA 9

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

int main(){
    char c;
    while((c=getchar())!=EOF){
        if(c<0||c>127){
            printf("%%%X",c+256);
        }
        else
            putchar(c);
    }
return 0;
}
 

ITSA8

註解部分為原本答案預設一解圍三重跟。
許沁憲表示判斷此根3次方和c相同則為重跟,不同則為無解。
#include <stdio.h>

int main(){
int a,b,c,i,j;

while(scanf("%d %d %d",&a,&b,&c)==3){

int ans[3],nc=0;
ans[0]=ans[1]=ans[2]=0;

for (i=-1000;i<=1000;i++){
    if ((i*i*i+a*i*i+b*i+c)==0)
        ans[nc++]=-i;
}
/*
if(nc==1){
    ans[2]=ans[1]=ans[0];
}
else if(nc==2&&ans[2]>ans[1]){
    int tmp;
    tmp=ans[2],ans[2]=ans[1],ans[1]=tmp;
}*/
for(i=0;i<3;i++)
    for(j=i;j<3;j++){
    int t;
    if(ans[i]>ans[j]) t=ans[i],ans[i]=ans[j],ans[j]=t;
    }
if(nc)
    printf("%d %d %d\n",ans[0],ans[1],ans[2]);
else
    printf("no solution\n");

}
return 0;
}

ITSA7

#include<stdio.h>
#include<stdlib.h>

int mark[50000], prime[50000], Pt = 0;

void sieve (){
 int i, j;
 for(i = 2; i <50000; i++) {
  if(mark[i] == 0) {
   prime[Pt++] = i;
   for(j = 2; j*i<50000; j++)
    mark[j*i] = 1;
  }
 }
}



int main(){
sieve();
int n,i;
scanf("%d",&n);
printf("%d=",n);
int tmp=n;
int p[200],pow[200],top=0;

for(i=0;prime[i]*prime[i]<tmp&&n;i++){
    if(n%prime[i]==0){
        p[top]=prime[i],pow[top]=0;
        while(n%prime[i]==0){
            n=n/prime[i];
            pow[top]++;
        }
        top++;
    }
}
if(top==0)
    printf("%d^1",n);
else{
    printf("%d^%d",p[0],pow[0]);
    for(i=1;i<top;i++)
        printf("*%d^%d",p[i],pow[i]);
}
puts("");
return 0;
}


這是許沁憲簡化版本的質因數分解
#include<stdio.h>
#include<stdlib.h>
int main()
{

int flag;
int g,num,i,n,x;
int p[100],pow[100],nc=0;

scanf("%d",&num);
printf("%d=",num);
n=num;
for(i=0;num%2==0;num=num/2,i++);
if(i>0)
p[nc]=2,pow[nc]=i,nc++;

for(g=3;g*g<=n && g<=num;g=g+2){
for(i=0;num%g==0;i++,num=num/g);
if(i>0)
p[nc]=g,pow[nc]=i,nc++;
}

if(num!=1) 
p[nc]=num,pow[nc]=1,nc++;


for(i=0;i<nc;i++){
if(i!=0)
printf("*");
printf("%d^%d",p[i],pow[i]);
}
printf("\n");
system("pause"); }

ITSA6

 
#include<stdio.h>

int main(){
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int year,m,fday,i;

scanf("%d %d %d",&year,&m,&fday);
if(year%4==0&&year%100!=0||year%400==0) month[1]=29;
printf(" S  M  T  W  T  F  S\n");
printf("--------------------\n");
for(i=0;i<month[m-1]+fday;i++){
if(i%7==0&&i!=0)
    printf("\n");
else if(i%7!=0)
    printf(" ");
if(i<fday)
    printf("  ");
else
    printf("%2d",i-fday+1);
}

printf("\n--------------------\n");
return 0;
}