//求最大素数
#include
#include
int main()
{
int m,i;
scanf("%d",&m);
for (m;m>1;m--){
for (i=2;i<1+m/2;i++){
if(!(m%i)) break;
if (i>=m/2){
printf("The max prime number is %d.\n",m);
return 0;
}
}
}
return 0;
}
//求任意年的母亲节在五月哪一天
#include
#include
int main()
{
int y, c, m, d, w, year;
scanf("%d", &year);
m = 5; d = 1;
y = year % 100;
c = year / 100;
w = y+y/4+c/4-2*c+26*6/10;
while (w<0){
w+=7;
}
w =w% 7;
switch (w){
case 0:w=8;break;
case 1:w=14;break;
case 2:w=13;break;
case 3:w=12;break;
case 4:w=11;break;
case 5:w=10;break;
case 6:w=9;break;
}
printf("%d\n",w);
}
//寻找阿姆斯特朗数
#include
#include
int main()
{
int sum,n,j,a=1,b,c,d,e=1,m=0,i;
scanf("%d",&n);
for(i=1;i a*=10; } for(i=a;i<10*a;i++){ b=i;sum=0; for(;b;b/=10){ c=b%10;e=1; for (d=1;d<=n;d++){ e*=c; } sum+=e; } if(sum==i){ printf("%d\n",i); m=1; } } if(!m){ printf("No output.\n"); } return 0; } //打印数字菱形 #include #include int main() { int n,m,i,j,k,g; scanf("%d",&n); for(i=1;i<=n;i++){ for(g=1;g<=n-i;g++){ printf(" "); } for(j=1;j<=i;j++){ printf("%-2d",n+1-j); } for(k=n-i+2;k<=n;k++){ printf("%-2d",k); } printf("\n"); } m=n-1; for(i=1;i<=m;i++){ for(g=1;g<=i;g++){ printf(" "); } for(j=n;j>i;j--){ printf("%-2d",j); } for (k=i+2;k<=n;k++){ printf("%-2d",k); } printf("\n"); } return 0; } //给出任意一天,计算那天是星期几 #include #include int main() { int y, c, m, d, w=0, year, month, day; scanf("%d %d %d", &year, &month, &day); m = month; d = day; /*判断数据是否合法 */ if ((month>=13)||(month<=0)){ printf("month is error.\n"); return 0; } if (day<=0){ printf("day is error.\n"); return 0; } /*runnian*/ if ((0==year%4)&&(0!=year%100)|| ( 0==year%400)){ w=1; } switch (m){ case 1: case 3: case 5: case 7: case 8: case 10: case 12:if (day>31){ printf("day is error.\n"); return 0; };break; case 4: case 6: case 9: case 11: if(d>30){ printf("day is error.\n"); return 0; };break; case 2: if(1==w){if((d>29)){ printf("day is error.\n"); return 0; } }else if (d>28){ printf("day is error.\n"); return 0; } break; } /*计算对应的星期几 */ if ((m == 1) || (m ==2 )) { m += 12;year--; } y = year % 100; c = year / 100; w = y+y/4+c/4-2*c+13*(m+1)/5+d-1; while (w<0){ w+=7; } w =w% 7; printf("%d\n", w); } //打印空心倒三角形 #include #include int main() { int n,i,j,g; scanf("%d",&n); if(1==n){ printf("*\n"); return 0; } for(i=1;i<=2*n-1;i++){ printf("*"); } printf("\n"); for(i=2;i<=n-1;i++){ for(g=1;g<=i-1;g++){ printf(" "); } printf("*"); for(j=1;j<2*(n-i);j++){ printf(" "); } printf("*\n"); } for(i=1;i<=n-1;i++){ printf(" "); } printf("*\n"); return 0; } //组成最大数 #include #include int main() { int arr[10]={-1};int i=0,x,max,m,j,g; scanf("%d",&x); do{ arr[i]=x%10; x/=10; i+=1; }while (x); for(j=0;j<=i-1;j++){ max=arr[0]; m=0; for(g=0;g<=i;g++){ if (max max=arr[g]; m=g; } } if(-1!=max){ printf("%d",max); arr[m]=-1; } } printf("\n"); return 0; } //计算后续日期 #include #include int main(){ int year,month,day,n; int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; while(scanf("%d %d %d\n %d",&year,&month,&day,&n)!=EOF){ if((0==year%4)&&(0!=year%100)|| (0==year%400)){ mon[2]=29; } else mon[2]=28; for(int i=1;i<=n;i++){ day+=1; if(day>mon[month]){ day=day-mon[month]; month++; if(month>12){ year++; month=1; if((year%4==0&&year%100!=0)||year%400==0){ mon[2]=29; } else mon[2]=28; } } } printf("%d.%d.%d\n",year,month,day); } return 0; } //有问题的程序:统计字符数、单词数、行数 #include #include int main(){ //1为数字,2为字母 int lines=0,words=0,chars=1,alei=0,blei=0;char a,b; a=getchar(); if(-1==a){ printf("Lines:0\nWords:0\nChars:0\n"); } if(10==a){ lines+=1; } while(1){ b=getchar(); chars+=1; if(10==b){ lines+=1; } if((a>=48)&&(a<=57)){// a是数字 alei=1; }else if((a>=65)&&(a<=90)){//a是字母 alei=2; }else if((a>=97)&&(a<=122)){//a是字母 alei=2; }else{ alei=3; } if((b>=48)&&(b<=57)){//b是数字 blei=1; }else if((b>=65)&&(b<=90)){//b是字母 blei=2; }else if((b>=97)&&(b<=122)){//b是字母 blei=2; } if(1==alei&&2==blei){//数字后有字母 words--; } if((2==alei)&&(32==b)){ words++; } if((2==alei)&&(10==b)){ words++; } if((2==alei)&&(9==b)){ words++; } if((2==alei)&&(EOF==b)){ words++;printf("Lines:%d\nWords:%d\nChars:%d\n",lines,words,chars-1); return 0; } if(EOF==b){ printf("Lines:%d\nWords:%d\nChars:%d\n",lines,words,chars-1); return 0;} a=b; } } //输入行数 n 和首数字字符,在屏幕上输出由数字围起的高和下底宽度均 n 的空心梯形。 要求:输出的数字是循环的,即输出数字 9 后再输出的数字是 0。 #include #include int main(){ int hangshu,chuzhi,yin,i,j,zhongzhi;int arr[11]={-1}; scanf("%d %d",&hangshu,&chuzhi); for(i=1;i<=hangshu;i++){// lines if(1==i){//first line printf("%d",chuzhi); arr[1]=chuzhi; yin=(chuzhi+1)%10; for(j=2;j<=(3*hangshu-2)/2;j++){ printf("%2d",yin); arr[j]=yin; yin++; yin%=10; } if(((3*hangshu-2)%2)&&(hangshu!=1)){ printf("%2d",yin); } for(j=(3*hangshu-2)/2;j>0;j--){ printf("%2d",arr[j]); } printf("\n"); yin=(chuzhi+1)%10; continue; } for(j=1;j<=2*i-3;j++){//front sps printf(" "); } if(i==hangshu){//last line for(j=1;j<=hangshu/2;j++){//numbers in last line printf("%2d",yin); arr[j]=yin; yin++; yin%=10; } if(hangshu%2){ printf("%2d",yin); } for(j=hangshu/2;j>0;j--){ printf("%2d",arr[j]); } printf("\n"); } if(i>1&&i printf("%2d",yin); for(j=1;j<=3*hangshu-2*i-2;j++){ printf(" "); } printf("%2d",yin); yin++; yin%=10; printf("\n"); } } return 0; } //请输出满足以下条件的 n 位正整数的个数: 要求该n位整数的从高位开始前 1 位可以被 1 整除,前 2 位可以被 2*2 整除,前 3 位可以被 3*3 整除,前 4 位可以被 4*4 整除......。即该整数前 k 位都可被 k 平方整除。 例如:n=1,则符合条件的1位正整数为1~9,输出答案 9。n=2,符合条件的正整数为:12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位 2 可以被1整除;前2位24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。 int n,inf,sup,counter=0,nf,start,i,j,jf,temp; scanf("%d",&n); switch (n){ case 0 :printf("0\n");return 0; case 1 :printf("9\n");return 0; case 2 :inf=10;break; case 3 :inf=100;break; case 4 :inf=1000;break; case 5 :inf=10000;break; case 6 :inf=100000;break; case 7 :inf=1000000;break; case 8 :inf=10000000;break; }; sup=10*inf; nf=n*n; for(i=1;start start+=nf; } for(start;start
temp=start; for(j=n-1;j>=1;j--){ jf=j*j; temp/=10; if(temp%jf){ break; } if(1==j){ counter+=1; } } } printf("%d\n",counter); //我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。 这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 2~36 之间。对于十以下的数字,用 0~9 表示,而十以上的数字,则使用大写的 A~Z 表示。 求出分别在 2~36 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。 #include #include #include #include typedef long long ll; #define rep(i,l,r) for(ll i=l;i<=r;i++) #define per(i,l,r) for(ll i=r;i>=l;i--) #define eif else if #define N 100005 #define max(a,b) a>b?a:b #define min(a,b) a
void Qsort(int *a,int l,int r){ if(l>r) return; int temp=a[l]; int i=l,j=r; while(i!=j) { while(a[j]>=temp&&i { j--; } while(a[i]<=temp&&i { i++; } if(i<=j) { int t=a[i]; a[i]=a[j]; a[j]=t; } } a[l]=a[i]; a[i]=temp; Qsort(a,l,i-1); Qsort(a,i+1,r); return; } int erfen(int *a,int x,int left,int right){ if(left==right){ if(a[left]==x) return left; else return -1; } int mid=(left+right)/2; if(x==a[mid]) return mid; eif(x<=a[mid]&&x>=a[1]) return erfen(a,x,left,mid); eif(x>=a[mid]&&x<=a[right]) return erfen(a,x,mid+1,right); else return -1; } int spow(int x,int y){ int ans=1; for(int i=1;i<=y;i++){ ans=ans*x; } return ans; } ll zhuan(char *str,int n,int m){ int len=strlen(str); int a[len+1]; for(int i=0;i if(str[i]>='0'&&str[i]<='9') a[i]=str[i]-'0'; else a[i]=str[i]-'A'+10; } int sum=0; for(int i=0;i a[i]=a[i]*spow(n,len-i-1); sum+=a[i]; } char ss[1005]; int nm=-1; while(sum){ int u=sum%m; if(u<10){ char c=u-0+'0'; nm++; ss[nm]=c; } sum/=m; } ll ans=0; per(i,0,nm) { ans=ans*10+(int)(ss[i]-'0'); } return ans; } int main(){ char str[1005]; scanf("%s",str); int len=strlen(str); int p=0; rep(i,0,len-1){ int cnt; if(str[i]>='0'&&str[i]<='9') cnt=str[i]-'0'; else cnt=str[i]-'A'+10; p=max(p,cnt); } char str1[1005]; scanf("%s",str1); int len1=strlen(str1); int q=0; rep(i,0,len1-1){ int cnt; if(str1[i]>='0'&&str1[i]<='9') cnt=str1[i]-'0'; else cnt=str1[i]-'A'+10; q=max(q,cnt); } int flag=0; rep(i,p+1,36){ ll nm1=zhuan(str,i,10); rep(j,q+1,36){ ll nm2=zhuan(str1,j,10); if(nm1==nm2){ printf("%s (base %lld) = %s (base %lld)\n",str,i,str1,j); flag=1; break; } } if(flag==1) break; } if(flag==0){ printf("%s is not equal to %s in any base 2..36\n",str,str1); } return 0; } // 看着这样的“回”形图案你晕吗? 让我们不用数组,来做出它。 输入: n。正方形的边长 输出: 边长为 n 的数字回形方阵。 #include "stdio.h" #define MAX 101 int main(int argc, char **argv){ int i, j, n = 4; int arr[MAX][MAX]; int state = 0, num = 0; int flag_count = 0; //记录当前点的四周有几个点不能走 scanf("%d", &n); getchar(); //初始化 for (i = 0; i <= n+1; i++){ for (j = 0; j <= n+1; j++){ //加围墙,-1 if (i == 0 || i == n+1 || j == 0 || j == n+1){ arr[i][j] = -1; continue; } arr[i][j] = 0; } } //输出初始化后的矩阵 printf("初始化后的矩阵:\n"); for (i = 0; i <= n+1; i++){ for (j = 0; j <= n+1; j++){ printf("%3d", arr[i][j]); } printf("\n"); } printf("\n输出脚印:\n"); i = 1; j = 1; while (1){ //如果四个方向都走过了,说明已经结束了 if (flag_count == 4){ printf("此点四个方向都走过了,跳出。\n", i, j); break; } //如果碰到已走过的,或者围墙,则退一步。退一步其实是为了改变方向 //其实这个点就是需要改变方向的点 if (arr[i][j] != 0){ switch (state){ case 0: //当前方向为右,向左退 j--;break; case 1: //当前方向为下,向上退 i--;break; case 2: //当前方向为左,向右退 j++;break; case 3: //当前方向为上,向下退 i++;break; } //改变方向 state = (state + 1) % 4; flag_count++; printf("改变方向的点:(%d, %d)\n", i, j, num); } else{ arr[i][j] = ++num; flag_count = 0; printf("(%d, %d) = %3d\n", i, j, num); } switch (state){ case 0: //向右走 j++;break; case 1: //向下走 i++;break; case 2: //向左走 j--;break; case 3: //向上走 i--;break; } } //输出结果 printf("\n结果:\n"); for (i = 1; i <= n; i++){ for (j = 1; j <= n; j++){ printf("%3d", arr[i][j]); } printf("\n"); } return 0; } //对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的 2.3×106 (计算机中的科学记数法表示为:2.3E6),或者 9.18×10-5 (科学记树法表示:9.18E-5)这种类型的数据。 输入: 用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。 输出: 该数据的双精度表示 说明: 输入数据的精度不高于小数点后50位。 输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。 结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。 #include #include int main(){ int arr[100];int flen=0,blen=0,i=0,j=0,k=1,ci=0,e=1;char cc; for(i=0;i<100;i++){//initialize arr[i]=0; } i=0; do{//输入小数点前的部分 cc=getchar(); ci=cc; if((ci>=48)&&(ci<=57)){//判断为数字则存入数组 arr[i]=ci-48;i++; flen++;//记录整数的位数 } if(cc=='.'){//检测到小数点 break; } if(cc==' '){//检测到空格 break; } } while(1); i=flen; if('.'==cc){ //上个循环于小数点处结束,输入小数部分 do{ cc=getchar(); ci=cc; if((ci>=48)&&(ci<=57)){//判断为数字,输入 arr[i++]=ci-48; blen++;//记录小数的位数 } if(cc==' '){//检测到空格,小数输入结束 break; } } while(1); } //end numbers input do{ cc=getchar(); if((cc='e')||(cc='E')){ scanf(" %d",&e); break; } }while(1);//Nothing wrong above //printf("%d\n%d\n%d\n",flen,blen,e); if(e>0){ for(j=0;j printf("%d",arr[j]); } printf("."); for(k=flen+e;k printf("%d",arr[k]); } printf("\n"); return 0; } if(e==0){ for(j=0;j printf("%d",arr[j]); } printf("."); for(k=flen;k printf("%d",arr[k]); } printf("\n"); return 0; } if(e<0){//power is nagetive e=0-e; if(e>=flen){//左移超出整数位数 printf("0."); if((e-flen)<=8){ for(j=1;j<=e-flen;j++){ printf("0"); }}else{ for(j=1;j<=8;j++){ printf("0");} } for(k=0;k<=(7-e+flen);k++){ printf("%d",arr[k]); } printf("\n"); }else{//左移不超过整数位数 for(i=0;i<(flen-e);i++){ printf("%d",arr[i]); } printf("."); for(i=flen-e;i<(flen-e+8);i++){ printf("%d",arr[i]); } printf("\n"); return 0; } } } 众所周知,联盟有很多水王,他们的发贴数是如此之多,以至于必须要用高精度数才能保存。 为了迎接国庆,联盟决定举行一次水王争霸赛,比赛的规则是将这些水王截止到2030年9月30日23时59分59秒这一刻所发的总贴数从大到小进行排序。每个水王当然都想取得尽量靠前的名次,所以他们竭尽全力,不择手段地进行灌水。 终于,激动人心的一刻到来了,2030年10月1日0时0分0秒,你作为裁判得到了每个水王的发贴数,现在,你的任务是公正地把这些水王按照发贴数从大到小进行排序。 输入的第一行是一个1到1000的整数N,表示总共有N位水王参加了争霸赛。 以下依次给出每位水王的描述,一位水王的描述占据两行,第一行为一个仅由字母和数字组成的长度不超过20的字符串,代表这个水王的ID,第二行一个高精度的整数(非负数),代表这个水王的发贴数。注意,这个整数的首位没有不必要的0。 所有水王发贴数数字的总长度(注意,是总长度而不是总和)不会超过10000。除了子母、数字和必要的换行,输入中不会出现空格等字符。 依次输出按照发贴数从大到小排好序的各位水王的ID,每个ID占据单独的一行。不能有任何多余的字符。若几个ID的发贴数相同,则按照ID的字典顺序先后排列。 注意:算法内存有限制,定义的数组不能超过此限制 #include #include char id[1002][21],shi[10100]; int feiwu[1003]={0},l[1002],s[1002]={0}; int main() { int i,j,k,n; scanf("%d",&n); n位水王 for(i=0;i scanf("%s",&id[i]); ID scanf("%s",&shi[feiwu[i]]); 贴数 feiwu[i+1]=strlen(shi); l[i]=feiwu[i+1]-feiwu[i]; s[i]=i; } int tmp,max; for(i=0;i for(j=0;j if(l[j] max=l[j+1]; l[j+1]=l[j]; l[j]=max; tmp=s[j+1]; s[j+1]=s[j]; s[j]=tmp; } } } for(i=0;i for(j=i+1;j if(l[i]==l[j]) { int flag=2; for(k=feiwu[s[i]];k { if(shi[k]>shi[k-feiwu[s[i]]+feiwu[s[j]]]) { flag=1;break; } else if(shi[k] { flag=0;break; } } if(!flag) { tmp=s[i]; s[i]=s[j]; s[j]=tmp; } if(flag==2) { int flagg=strcmp(id[s[i]],id[s[j]]); if(flagg>0) { tmp=s[i]; s[i]=s[j]; s[j]=tmp; } } } } } for(i=0;i { printf("%s\n",id[s[i]]); } } 背景: 压缩是一种有效的减小数据量的方法,目前已经被广泛应用于各种类型的信息系统之中。 一种压缩文本文件(假设文件中不包含数字)的方法如下: 1. 原始文本文件中的非字母的字符,直接拷贝到压缩文件中; 2. 原始文件中的词(全部由字母组成),如果是第一次出现,则将该词加入到一个词的列表中,并拷贝到压缩文件中;否则该词不拷贝到压缩文件中,而是将该词在词的列表中的位置拷贝到压缩文件中。 3. 词的列表的起始位置为 1 。 词的定义为文本中由大小写字母组成的最大序列。大写字母和小写字母认为是不同的字母,即 abc 和 Abc 是不同的词。词的例子如下: x-ray 包括两个词 x 和 ray;mary's 包括两个词 mary 和 s;a c-Dec 包括三个词 a 和 c 和 Dec 编写一个程序,输入为一组字符串,输出为压缩后的文本。 输入: 输入为一段文本,可以假设输入中不会出现数字、每行的长度不会超过 80 个字符,并且输入文本的大小不会超过 10M。 输出:压缩后的文本。 测试输入 期待的输出时间限制内存限制额外进程 测试用例 1 以文本方式显示 Please, please do it--it would please Mary very,↵ very much.↵ ↵ Thanks↵ 以文本方式显示 Please, please do it--4 would 2 Mary very,↵ 7 much.↵ ↵ Thanks↵ 1秒 1024KB 0 #include #include int main(){ int word=0,i=0,j=0,k=0,flag=1,m=0; char s[500],words[10000][100],a[500]; for(i=0;i<10000;i++) for(j=0;j<100;j++) words[i][j]='\0'; while(gets(a) != NULL){//得到一行 if('\0'==a[0]){printf("\n");continue;}//只有一个换行符,那就换行 //有意义的一行,初始化 for(i=0;a[i]!='\0';i++)s[i+1]=a[i]; s[0]='.';s[i+1]='\0';k=0; i=1; while(s[i]!='\0'){//依次处理每个字符 if((s[i]>='a' && s[i]<='z')||(s[i]>='A' && s[i]<='Z')){ //这是一个字母 if(!((s[i-1]>='a' && s[i-1]<='z')||(s[i-1]>='A' && s[i-1]<='Z'))){ word++;k=0;words[word][k++]=s[i];}//这是一个单词的开头 else{words[word][k++]=s[i]; }//把这个字母放好了,干点儿别的 if(!((s[i+1]>='a' && s[i+1]<='z')||(s[i+1]>='A' && s[i+1]<='Z'))){ //单词结束就审判 words[word][k]='\0'; flag=1; for(j=1;j if(!strcmp(words[j],words[word])){ printf("%d",j); for(m=0;m<100;m++){words[word][m]='\0';} word--; flag=0; break; } } if(flag){printf("%s",words[word]);}} }else{ putchar(s[i]); }i++; } printf("\n"); } return 0; } Tom 和 Jerry 做猜数字的游戏,Tom 想一个数字然后让 Jerry 去猜,数字的范围在 1 到 10 之间。对于 Jerry 每讲的一个数,Tom 都要讲这个数是 too high 或者 too low 或者 right on,直到 right on 结束。为了防止 Tom 作弊,Jerry 把每一次的对话记录下来,现在让你去判断 Tom 有没有作弊。 游戏可能做很多次,直到 Jerry 猜 0 的时候游戏结束,每一次猜测由一个正整数和一行回答组成。 对每一次游戏如果 Tom 的回答有自相矛盾的地方,就输出 Tom is dishonest,否则输出 Tom may be honest。 #include #include int main(){ int n,h,l; char ans[50]; h=11;l=-1; while(scanf("%d",&n)){//得到猜的数字 if(0 == n)break;//猜0的时候结束 getchar(); //扫描换行 gets(ans); //得到回答 if(strcmp(ans,"too high") == 0){//回答是太高 if(n < h) h=n;//更新上界h }else if(strcmp(ans,"too low") == 0){//回答太低 if(n > l) l=n;//更新下界l }else if(strcmp(ans,"right on") == 0){//回答猜对了判断人品 if(n > l && n < h) printf("Tom may be honest\n"); else printf("Tom is dishonest\n"); h=11;l=-1;//为新一轮初始化 } } return 0; } C语言课程开设以来,许多同学被各种WA,RE,TLE,MLE伤得欲哭无泪。 而YW大神,由于程序写得好,代码改的快,亲和又善良,纯洁又无害(此处省略1000字)不少同学纷纷找大神求改程序。 然而,其中某渣渣同学发来的代码处于:无换行无缩进无对齐的”三无状态”,令沉溺于SM(哦不,ACM)这种高水平的大神才能享受的比赛的大神头昏眼花,倍感心酸。 大神每次帮渣渣改程序都要耗费大量地精力和愉悦度(这是大神的HP与MP)来规范代码。(此处有哭声) 于是,作为大神的好基友大师,你决定写一个程序来将渣渣发来的程序自动“规范化”,以愉悦善良又可爱又机智又神牛的大神,让TA能够有足够的心情和时间去ACM的课程中虐人。(什么?你问大神为什么不写一个这样的程序? 答案是显然的,大神没有精力写这种简单的程序,当然要让大神的崇拜者大师来写。) 活泼的PS: 大家写代码要注意规范哦~~~不然大神哭给你看呜呜呜呜…… 自己改错是一个好习惯~~可以从改错误收获很多~ 大神还要去虐校赛地区赛各种赛呢~ 那么~ 什么是「规范化」捏? 鉴于渣渣同学的水平(= =),我们假定渣渣的代码中不存在注释,不存在for和if语句的嵌套,也不会存在一些奇葩语句。if语句不会有else,for循环的结构体保证有大括号{}包围。虽然渣渣的代码没有缩进,但时不时会有一些换行。 大师,渣渣(2012级实验学生提供) 测试输入 期待的输出时间限制内存限制额外进程 测试用例 1 以文本方式显示 以文本方式显示 无限制 64M 0 测试用例 2 以文本方式显示 以文本方式显示 无限制 64M 0 测试用例 6 以文本方式显示 以文本方式显示 无限制 64M 0 #include #include char a[10000];int sj; void dayinsj(int i); int main(){ int len,flag=0,i;char c; while((c=getchar())!=EOF){ if(c=='\n'){continue;} a[i]=c;i++; //获得输入 } len = i; for(i = 0;i if(a[i]=='>'){putchar(a[i]);putchar('\n');//到了链接库之后,换行 }else if(a[i]=='{'){//一个语句块的开始 putchar('\n');//它要在单独的一行 dayinsj(sj);//且要缩进 putchar(a[i]);//把它打印出来 putchar('\n');//单独一行的单独 sj++;//后面的内容要增加缩进 dayinsj(sj);//缩进 }else if(a[i]=='f'&&a[i+1]=='o'&&a[i+2]=='r'){//for循环 putchar(a[i]);flag=2;//标记有两次不换行的;号 }else if(a[i]=='}'){//一个语句块的结束 if(a[i-1]==';'&&a[i+1]!='}'){//之前是分号,自己完成换行缩进。之后不是},换行缩进 putchar('\n');sj--;dayinsj(sj);putchar(a[i]);putchar('\n');dayinsj(sj); }else if(a[i-1]==';'&&a[i+1]=='}'){//之前是分号,之后有},让下一个自己看着办 putchar('\n');sj--;dayinsj(sj);putchar(a[i]); }else if(a[i-1]=='}'&&a[i+1]=='}'){//自己看着办 putchar('\n');sj--;dayinsj(sj);putchar(a[i]); }else if(a[i-1]=='}'&&a[i+1]!='}'){ putchar('\n');sj--;dayinsj(sj);putchar(a[i]);putchar('\n');dayinsj(sj); } }else if(a[i]==';'){ if(flag==0){//不是for循环 if(a[i+1]=='}'){//这是语句块的结尾 putchar(a[i]);//剩下的让}自己去做吧 }else{//普通语句结束 putchar(a[i]);putchar('\n');dayinsj(sj); } }else{putchar(a[i]);flag--;}//是for循环 }else{putchar(a[i]);}//其他内容没有特殊要求 } return 0; } void dayinsj(int i){ int j=0; if(i){ for(j=0;j" "); } } //递归求平方根 #include #include double Sqrt(double x,double p,double e); int main(){ double x,e,p; scanf("%lf\n%lf",&x,&e); p=0.5*x; printf("%.8lf\n",Sqrt(x,p,e)); return 0; } double Sqrt(double x,double p,double e){ if(fabs(p*p-x) else{return Sqrt(x,0.5*(p+x/p),e);} } //递归求最大公约数 #include #include int gcd(int n,int m); int main( ){ int m,n; scanf("%d %d",&n,&m); printf("%d\n",gcd(m,n)); return 0; } int gcd(int n,int m){ if(m<=n&&0==n%m){return m;}//后面的小,且大的是小的的整数倍,那小的就是结果 if(n else{return gcd(m,n%m);} } //采用指针对数组进行排序 #include #include char *resort(char *a); int main(int argc, char *argv[]) { char a[100]; gets(a); puts(resort(a)); return 0; } char *resort(char *a){ char temp;char *i;char *j; for(i=a;*i!='\0';i++){ for(j=i+1;*j!='\0';j++){ if(*j<*i){temp=*i;*i=*j;*j=temp;} } } return a; } //快速排序算法的实现 //快速排序函数:要求:输入数组左右两端位置,将数组定义为全局变量在此函数中叫a void quicksort(int left,int right); void quicksort(int left,int right){ int i,j,temp,t; if(left>right) return; temp = a[left];i = left;j = right; while(i != j){ while(a[j] >= temp && i < j) j--; while(a[i] <= temp && i < j) i++; if(i < j){ t = a[i];a[i] = a[j];a[j] = t; } } a[left]=a[i];a[i]=temp; quicksort(left,i-1); quicksort(i+1,right); } 题目描述 欢迎参加程序设计竞赛~ 程序设计竞赛中有着很多有意思的问题,其中,与三角形有关的问题就经常出现。今天你要解决的,就是其中最简单的一个问题: 给定平面直角坐标系上的N个点,保证这N个点中任意三点都不共线。求任意三点能够构成的三角形中,面积最大的三角形的面积。 输入 输入的第一行是一个整数T(1 <= T <= 10),表示一共有T组用例。 每组用例的第一行为一个整数N(3 <= n <= 100),表示平面上点的个数。接下来的N行,每行包含两个用空格隔开的整数Xi和Yi(-1000 <= Xi, Yi <= 1000),表示第i个点的坐标(Xi, Yi)。 输出 每组用例输出一个数,表示最大的三角形的面积,结果保留一位小数。 #include int main(int argc, char *argv[]) { int x[102],y[102]; int i=0,k=0,j=0,t,n;double a=0,max=0; scanf("%d",&t); for(t;t;t--){ scanf("%d",&n);max=0; for(i=0;i scanf("%d %d",&x[i],&y[i]); } for(i=0;i for(j=0;j for(k=0;k a=(x[i]-x[j])*(y[k]-y[j])-(x[k]-x[j])*(y[i]-y[j]); if(a<0) a*=(-1); a/=2.0; if(a>max) max=a; } } } printf("%.1lf\n",max); } return 0; }
Description
Input
Output
描述
输入
输出
题目背景
题目作者