蛇形填数
//注意i++和++i,i++可以理解为先用i的当前值计算,计算完之后+1,++i是先+1,然后再进行运算
#include<stdio.h>
#include<string.h>
#define MAX 10
int a[MAX][MAX];
int main()
{
int tot,x,y,n,i,j;
scanf("%d",&n);
memset(a,0,sizeof(a));
tot = a[x=0][y=n-1] = 1;
while(tot<n*n)
{
while(x+1<n&&!a[x+1][y])
{
a[++x][y] = ++tot;
}
while(y-1>=0&&!a[x][y-1])
{
a[x][--y] = ++tot;
}
while(x-1>=0&&!a[x-1][y])
{
a[--x][y] = ++tot;
}
while(y+1<n&&!a[x][y+1])
{
a[x][++y] = ++tot;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
return 0;
}
竖式计算
#include<stdio.h>
#include<string.h>
int main()
{
int i,abc,de,x,y,z,key,count=0;
char s[10],buf[100];
scanf("%s",s);
for(abc=100;abc<1000;abc++)
{
for(de=11;de<100;de++)
{
x = abc*(de/10);
y = abc*(de%10);
z = abc*de;
sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);//将数据直接输出到字符数组中
key = 1;
for(i=0;i<strlen(buf);i++)
{
if(strchr(s,buf[i])==NULL)//strchr函数判断某个元素是否在字符串中出现过并返回位置
{
key =0;
}
}
if(key)
{
printf("<%d>\n",++count);
printf("%5d\n*%4d\n------\n%5d\n%4d\n------\n%5d\n",abc,de,x,y,z);
}
}
}
printf("the answer is %d \n",count);
return 0;
}
最长回文子串
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAX 5000
char buf[MAX],s[MAX];
int p[MAX];
int main()
{
int i,j,len,m=0,x,y,max=0;
fgets(buf,sizeof(s),stdin);//可以无差别的接受空格逗号等符号
len = strlen(buf);
for(i=0;i<len;i++)
{
if(isalpha(buf[i]))//isalpha 判断是否是英文字符
{
p[m] = i;//用数组p来记录数组s中的字符在数组buf中的位置
s[m++] = toupper(buf[i]);//toupper()将该字符转换为小写
}
}
for(i=0;i<m;i++) //按照逐个字符判断是否是回文子串,向该字符前或者该字符后 对比
{
for(j=0;i-j>=0&&i+j<m;j++)
{
if(s[i-j]!=s[i+j]) break;
if(2*j+1>max) //此处判断aba型 (i-j)对应(i+j)
{
max = 2*j+1;
x = p[i-j];
y = p[i+j];
}
}
for(j=0;i-j>=0&&i+j+1<m;j++)
{
if(s[i-j]!=s[i+j+1]) break;
if(2*j+2>max) //此处判断abba型(i-j)对应(i+j+1)
{
max = 2*j+2;
x = p[i-j];
y = p[i+j+1];
}
}
}
for(i = x;i<=y;i++)
{
printf("%c",buf[i]);
}
printf("\n");
return 0;
}
单词计算
输入若干个单词,求平均长度,输入只包括大小写字母以及一个或多个空格
#include<stdio.h>
#include<string.h>
#define MAX 100
char a[MAX];//用来存放字符串
int b[MAX];//记录每个单词的字母个数
int main()
{
int i,j=0,len,count=0;
fgets(a,sizeof(a),stdin);
len = strlen(a);
for(i = 0;i<len;i++)
{
if(a[i]==' '||a[i+1]=='\0')//因为遍历不到'\0',所以在这里i+1,当检测到最后一个字符时即可判断
{
if(a[i+1]==' ')
{
continue;
}
else
{
b[j++] = count;
count = 0;//重置count,用来记录下一个单词的字母个数
continue;
}
}
else
{
count++;
}
}
for(i=0;i<j;i++)
{
printf("%3d ",b[i]);
}
printf("\n");
return 0;
}
计算机
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#define MAX 100
char buf[MAX],a[MAX];
int main()
{
int i,j,len,k=0,key=0,x=0,y=0,pos;
fgets(buf,MAX,stdin);
len = strlen(buf);
for(i=0;i<len;i++)
{
if(buf[i+1]=='\0')
{
y = atol(a);
memset(a,0,sizeof(a));
break;
}
if((buf[i]==' '||buf[i]=='\t')&&(buf[i+1]!=' '&&buf[i+1]!='\t')&&x==0)
{
x = atol(a);
k=0;
memset(a,0,sizeof(a));
}
if(buf[i]>='0'&&buf[i]<='9') a[k++] = buf[i];
}
for(i=0;i<len;i++)
{
if(buf[i]=='+')
{
a[0] = '+';
pos = x+y;
}
if(buf[i]=='-')
{
a[0] = '-';
pos = x-y;
}
if(buf[i]=='*')
{
a[0] = '*';
pos = x*y;
}
}
printf("%d %c %d = %d\n",x,a[0],y,pos);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
int a,b;
char f;
scanf("%d",&a);
scanf("%c",&f);
while((f!='+')&&(f!='*')&&(f!='-'))//此处循环是关键,只要不等于运算符,那就一直读取空格或者换行符
{
scanf("%c",&f);
}
scanf("%d",&b); //这里输入 123时会自动省略空格
if(f == '+') printf("%d %c %d = %d",a,f,b,a+b);
else if(f=='-') printf("%d %c %d = %d",a,f,b,a-b);
else printf("%d %c %d = %d",a,f,b,a*b);
return 0;
}
乘积的末三位
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAX 100
char str[MAX];
int main()
{
int num,n,pos=1;
while(1)
{
num = scanf("%d",&n);
if(num==EOF) break;//n为ctrl+z时
if(num==1) pos = (pos*(n%1000))%1000;//n为数字时
else fgets(str,MAX,stdin);//n为字符串时
}
printf("%3d\n",pos);
return 0;
}