1
int sum( int m, int n );
#include <stdio.h>
int sum(int m, int n);
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("sum = %d\n", sum(m, n));
return 0;
}
int sum(int m,int n){
int sum;
for(int i = m;i<=n;i++){
sum+=i;
}
return sum;
}
int max( int a, int b );
#include <stdio.h>
int max( int a, int b );
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("max = %d\n", max(a, b));
return 0;
}
int max(int a,int b){
int x;
if(a>b)
x = a;
else
x = b;
return x;
}
void pyramid( int n );
#include <stdio.h>
void pyramid( int n );
int main()
{
int n;
scanf("%d", &n);
pyramid(n);
return 0;
}
void pyramid(int n){
int i, j, space;
for(i=1; i <= n; i++) {
space = n - i;
for (j = 0; j < space; j++)
putchar(' ');
for (j = 0; j < i; j++)
printf("%-2d", i);
putchar('\n');
}
}
#include <stdio.h>
int sign( int x );
int main()
{
int x;
scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));
return 0;
}
int sign(int x){
int y;
if(x>0)
y = 1;
else if(x == 0)
y = 0;
else
y = -1;
return y;
}
#include <stdio.h>
#define MAXN 10
int even( int n );
int OddSum( int List[], int N );
int main()
{
int List[MAXN], N, i;
scanf("%d", &N);
printf("Sum of ( ");
for ( i=0; i<N; i++ ) {
scanf("%d", &List[i]);
if ( even(List[i])==0 )
printf("%d ", List[i]);
}
printf(") = %d\n", OddSum(List, N));
return 0;
}
int even( int x )
{
if(x%2==0)
return 1;
else
return 0;
}
int OddSum( int List[], int z )
{
int s=0,m;
for(m=0;m<z;m++)
{
if(even(List[m])==0)
s+=List[m];
}
return s;
}
6
#include <stdio.h>
#include <math.h>
double dist( double x1, double y1, double x2, double y2 );
int main()
{
double x1, y1, x2, y2;
scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("dist = %.2f\n", dist(x1, y1, x2, y2));
return 0;
}
double dist( double x1, double y1, double x2, double y2 ){
double a, b, dis;
a=fabs(x1-x2);
b=fabs(y1-y2);
dis=sqrt(pow(a, 2)+pow(b, 2));
return dis;
}
#include <stdio.h>
#include <math.h>
int prime( int p );
int PrimeSum( int m, int n );
int main()
{
int m, n, p;
scanf("%d %d", &m, &n);
printf("Sum of ( ");
for( p=m; p<=n; p++ ) {
if( prime(p) != 0 )
printf("%d ", p);
}
printf(") = %d\n", PrimeSum(m, n));
return 0;
}
int prime( int p )
{
int i,f;
if(p<=1)
return 0;
else
{
f=1;
for(i=2;i<=p/2;i++)
{
if(p%i==0)
{
f=0;
break;
}
}
if(f==1)
return 1;
else
return 0;
}
}
int PrimeSum( int m, int n )
{
int i,s=0;
for(i=m;i<=n;i++)
{
if(prime(i))
s+=i;
}
return s;
}
#include <stdio.h>
int CountDigit( int number, int digit );
int main()
{
int number, digit;
scanf("%d %d", &number, &digit);
printf("Number of digit %d in %d: %d\n", digit, number, CountDigit(number, digit));
return 0;
}
int CountDigit( int number, int digit )
{
int count = 0;
if(number < 0)
{
number = -number;
}
while(number)
{
if(number % 10 == digit)
{
count ++;
}
number /= 10;
}
return count;
}
#include <stdio.h>
#include <math.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
int narcissistic(int number)
{
int countNumber = 0; // 计数number数字的位数
int tempNumber = number;
// 求得number数字的位数
while (tempNumber != 0)
{
tempNumber /= 10;
countNumber++;
}
int sumNumber = 0; // number的各位数字之和
int itemNumber = number;
while (itemNumber != 0)
{
int lastNumber = itemNumber % 10;
// 求number数字的各位数字之和
sumNumber += pow(lastNumber, countNumber);
itemNumber /= 10;
}
// 是水仙花数
if (sumNumber == number)
{
return 1;
}
return 0;
}
void PrintN(int m, int n)
{
// 根据题意,从开区间(m,n)开始判断
for (int i = m + 1; i < n; i++)
{
if (narcissistic(i) == 1)
{
printf("%d\n", i);
}
}
}
10
#include <stdio.h>
#include <math.h>
double funcos( double e, double x );
int main()
{
double e, x;
scanf("%lf %lf", &e, &x);
printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
return 0;
}
double funcos( double e, double x ){
double item=1, sum=0, denominator=2;
int i=1, flag=1;
while(fabs(item)>=e){
sum+=item;
flag=-flag;
item=pow(x, 2*i)/denominator*flag; //下一项
i++;
denominator=(i*2-1)*(2*i)*denominator; //下一项分母
}
sum+=item; //记得加最后一项
return sum;
}
11
void StringCount( char s[] )
{
int letter, blank, digit, other, N = 0;
letter = blank = digit = other = 0;
for (int i = 0; s[i]; ++i) // s[i] 不为 NULL就继续循环
{
if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <='Z'))
letter++;
else if (s[i] == ' '|| s[i] == '\n')
blank++;
else if (s[i] >= '0' && s[i] <= '9')
digit++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d", letter, blank, digit, other);
}
12
#include <stdio.h>
int fn( int a, int n );
int SumA( int a, int n );
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("fn(%d, %d) = %d\n", a, n, fn(a,n));
printf("s = %d\n", SumA(a,n));
return 0;
}
int fn( int a, int n ){
int p=1;
int sum=0;
sum=a*p;
for (int i=1;i<n;i++){
p=p*10;
sum+=a*p;
}
return sum;
}
int SumA( int a, int n ){
int sumA = 0;
for(int i=1;i<=n;i++){
sumA += fn(a,i);
}
return sumA;
}
13
#include <stdio.h>
int factorsum( int number );
void PrintPN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( factorsum(m) == m ) printf("%d is a perfect number\n", m);
if ( factorsum(n) == n ) printf("%d is a perfect number\n", n);
PrintPN(m, n);
return 0;
}
int factorsum(int number)
{
// sum为number的除本身以外所有因子之和
int sum = 0;
// 从1开始,依次找到number的除本身以外的每一个因子i
for (int i = 1; i < number; i++)
{
if (number % i == 0)
{
sum += i;
}
}
return sum;
}
void PrintPN(int m, int n)
{
// 标志性变量flag,为0表示区间[m,n]之间不存在完数,否则存在完数
int flag = 0;
for (int i = m; i <= n; i++)
{
if (factorsum(i) == i)
{
// [m,n]之间存在完数,flag赋值为1
flag = 1;
// 为方便按题目格式输出,1一定是某个数的因子,故从2开始往后找因子
printf("%d = 1", i);
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
printf(" + %d", j);
}
}
printf("\n");
}
}
// 区间[m,n]不存在完数
if (flag == 0)
{
printf("No perfect number");
}
}
14
#include <stdio.h>
int fib( int n );
void PrintFN( int m, int n );
int main()
{
int m, n, t;
scanf("%d %d %d", &m, &n, &t);
printf("fib(%d) = %d\n", t, fib(t));
PrintFN(m, n);
return 0;
}
int fib( int n )
{
int n1=1;
if(n>2){
n1=fib(n-1)+fib(n-2);
}
return n1;
}
void PrintFN( int m, int n )
{
int i=1;
int flag=0;//标记求得的斐波那契数
int blank=1;//控制字符前面是否带空格,标记为真,方便输出不带空格的第一个数
while(fib(i)<m)
{
i++;
}
while(fib(i)<=n)
{
if(blank)
{
printf("%d",fib(i));//第一项,不带空格
flag++;
blank=0;//标记为假,执行另一判断语句
}
else
{
printf(" %d",fib(i));
}
i++;
}
if(flag==0)
{
printf("No Fibonacci number");
}
}
15
#include <stdio.h>
#include <math.h>
int prime( int p );
void Goldbach( int n );
int main()
{
int m, n, i, cnt;
scanf("%d %d", &m, &n);
if ( prime(m) != 0 ) printf("%d is a prime number\n", m);
if ( m < 6 ) m = 6;
if ( m%2 ) m++;
cnt = 0;
for( i=m; i<=n; i+=2 ) {
Goldbach(i);
cnt++;
if ( cnt%5 ) printf(", ");
else printf("\n");
}
return 0;
}
int prime(int p)
{
int i;
int flag; /*素数1,非素数0*/
if (p <= 1)
flag = 0;
else if (p == 2 || p == 3)
flag = 1;
else
{
for (i = 2; i <= sqrt(p); i++)
if (p%i == 0)
{
flag = 0;
break;
}
if (i == (int)sqrt(p) + 1)
flag = 1;
}
return flag;
}
void Goldbach(int n)
{
int p, q;
if (n >= 6 && n % 2 == 0)
for (p = 2; p <= n / 2; p++)
{
q = n - p;
if (prime(p) && prime(q))
{
printf("%d=%d+%d", n, p, q);
break;
}
}
}
16
#include <stdio.h>
int reverse( int number );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", reverse(n));
return 0;
}
int reverse( int number ){
int symbol=1,x,sum=0;
if(number<0){
number=-number;
symbol=-1;
}
while(number>0){
x = number%10;
sum = sum * 10 +x;
number/=10;
}
sum*=symbol;
return sum;
}
17
#include <stdio.h>
void sum_diff( float op1, float op2, float *psum, float *pdiff );
int main()
{
float a, b, sum, diff;
scanf("%f %f", &a, &b);
sum_diff(a, b, &sum, &diff);
printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);
return 0;
}
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
18
#include <stdio.h>
#include <string.h>
#define MAXS 10
void Shift( char s[] );
void GetString( char s[] ); /* 实现细节在此不表 */
int main()
{
char s[MAXS];
GetString(s);
Shift(s);
printf("%s\n", s);
return 0;
}
void Shift( char s[] )
{
int i,j;
for(i=0;i<3;i++)
{
char b=s[0];
for(j=0;s[j+1]!='\0';j++)//字符串在你输入最后一个字符时,后面还有一个特殊字符(暂且称为特殊字符),即“\0”,电脑输出字符串时,遇到\0,就会停止输出,
//循环结束时j的值为最后一个字符的下标值。
s[j]=s[j+1];
s[j]=b;
}
}
19
#include <stdio.h>
void splitfloat( float x, int *intpart, float *fracpart );
int main()
{
float x, fracpart;
int intpart;
scanf("%f", &x);
splitfloat(x, &intpart, &fracpart);
printf("The integer part is %d\n", intpart);
printf("The fractional part is %g\n", fracpart);
return 0;
}
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
20
#include <stdio.h>
#define MAXN 10
int search( int list[], int n, int x );
int main()
{
int i, index, n, x;
int a[MAXN];
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
printf("index = %d\n", index);
else
printf("Not found\n");
return 0;
}
int search( int list[], int n, int x ){
int i;
for(i=0;i<n;i++){
if(list[i]==x){
return i;
}
}
return -1;
}
21
#include <stdio.h>
#define MAXN 10
void ArrayShift( int a[], int n, int m );
int main()
{
int a[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
ArrayShift(a, n, m);
for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
void ArrayShift( int a[], int n, int m )
{
int i,j,t;
for(i=0; i<m; i++)//共移m位
{
t = a[n-1];
for(j=n-1; j>=1; j--) //每次移动全部数组一位
a[j] = a[j-1];
a[0] = t;
}
}
22
#include <stdio.h>
#define MAXN 20
void CountOff( int n, int m, int out[] );
int main()
{
int out[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
CountOff( n, m, out );
for ( i = 0; i < n; i++ )
printf("%d ", out[i]);
printf("\n");
return 0;
}
void CountOff( int n, int m, int out[] )
{
int rank=1;//这个是退出顺序
int k=0;//这个是模拟人数数的
// 从1开始数(赋值为0是因为接下来的循环中会先行k++)
//数到m时便将顺序填入对应的数组中
for(int i=0;i<n;i++) out[i]=0; //为了可以区别有哪些是还没退出的,
//我们将没退出的赋值为0
while(rank!=n+1)
{
for(int j=0;j<n;j++)//遍历数组
{
if(out[j]==0)//只数没退出的数组(out[j]==0)
{
k++;
}
if(k==m)//数到m时将顺序赋值给相应的数组,让对应的数组退出
{
out[j]=rank;
rank++;
k=0;//从新数过(指k这个计数的从新数过)
//(而不是指数组从新遍历,若是该数组还没遍历完是会继续遍历的)
}
}
}
}
23
#include <stdio.h>
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
void strmcpy( char *t, int m, char *s )
{
int i,b;
for(i=0,b=m-1;t[b]!='\0';b++,i++)
{
s[i]=t[b];
}
s[i]=t[b];
return ;
}
24
#include <stdio.h>
#define MAXN 20
void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char str[MAXN], c;
scanf("%c\n", &c);
ReadString(str);
delchar(str, c);
printf("%s\n", str);
return 0;
}
void delchar( char *str, char c){
int i,j;
i=0;j=0;
while(str[i]!='\0'){
if(str[i]!=c){
str[j]=str[i];
j++;
}
i++;
}
str[j]='\0';
}
25
#include <stdio.h>
#include <string.h>
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
char s[MAXN];
scanf("%s", s);
if ( palindrome(s)==true )
printf("Yes\n");
else
printf("No\n");
printf("%s\n", s);
return 0;
}
bool palindrome(char *s)
{
int i,n=0,j;
for(i=0;s[i] != 0;i++)
n++;
for(i=0,j=n-1;i<j;i++,j--)
if(s[i] != s[j])
return false;
return true;
}
26
#include <stdio.h>
#define MAXS 15
void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
StringCount(s);
return 0;
}
#include <string.h>
void StringCount( char *s )
{
int cap=0,low=0,bla=0,num=0,els=0,i,n;
n=strlen(s);
for(i=0;i<n;i++)
{
if(s[i]>='A'&&s[i]<='Z')
cap++;
else if(s[i]>='a'&&s[i]<='z')
low++;
else if(s[i]==' ')
bla++;
else if(s[i]>='0'&&s[i]<='9')
num++;
else
els++;
}
printf("%d %d %d %d %d",cap,low,bla,num,els);
}
27
#include <stdio.h>
struct complex{
int real;
int imag;
};
struct complex multiply(struct complex x, struct complex y);
int main()
{
struct complex product, x, y;
scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);
product = multiply(x, y);
printf("(%d+%di) * (%d+%di) = %d + %di\n",
x.real, x.imag, y.real, y.imag, product.real, product.imag);
return 0;
}
struct complex multiply(struct complex x, struct complex y)
{
struct complex product;//!!!!!!!!!!!!!
product.real=x.real*y.real-x.imag*y.imag;
product.imag=x.imag*y.real+y.imag*x.real;
return product;
}
28
#include <stdio.h>
#define MAXN 10
struct student{
int num;
char name[20];
int score;
char grade;
};
int set_grade( struct student *p, int n );
int main()
{ struct student stu[MAXN], *ptr;
int n, i, count;
ptr = stu;
scanf("%d\n", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
}
count = set_grade(ptr, n);
printf("The count for failed (<60): %d\n", count);
printf("The grades:\n");
for(i = 0; i < n; i++)
printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
return 0;
}
int set_grade( struct student *p, int n )
{
int count=0,i;
for(i=0;i<n;i++)
{
if((*p).score<60) /* *p需用括号括起来,因为*p.score等同*(p.score) */
{
(*p).grade='D';
count++;
}
else if((*p).score>=60&&(*p).score<=69)
(*p).grade='C';
else if((*p).score>=70&&(*p).score<=84)
(*p).grade='B';
else
(*p).grade='A';
p++; //最后有个p++ 代表从p0 ——> p1.........
}
return count; // return 只能返回一个值 所以 返回count 代表 set_grede 的值
} //其余的操作通过 *p 来完成
29
#include <stdio.h>
int sum( int n );
int main()
{
int n;
scanf("%d", &n);
printf ("%d\n", sum(n));
return 0;
}
int sum( int n )
{
int a;
if(n==0)
a=0;
else
a=sum(n-1)+n;
return a;
}
30
#include <stdio.h>
double fact( int n );
double factsum( int n );
int main()
{
int n;
scanf("%d",&n);
printf("fact(%d) = %.0f\n", n, fact(n));
printf("sum = %.0f\n", factsum(n));
return 0;
}
double fact( int n )
{
double result;
if(n==1||n==0)
result=1;
else
result=fact(n-1)*n;
return result;
}
double factsum( int n )
{
double result;
if(n==1)
result=1;
else if(n==0)
result=0;
else
result=factsum(n-1)+fact(n);
return result;
}
31
#include <stdio.h>
double calc_pow( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.0f\n", calc_pow(x, n));
return 0;
}
double calc_pow( double x, int n ){
int result;
if(n==1){
result=x;
}else{
result=x*calc_pow(x,n-1);
}
return result;
}
32
#include <stdio.h>
double fn( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.2f\n", fn(x,n));
return 0;
}
#include<math.h>
double fn( double x, int n ){
double f;
if(n==1){
f=x;
}else{
f=pow(-1,n-1)*pow(x,n)+fn(x,n-1);
}
return f;
}
33
#include <stdio.h>
int Ack( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("%d\n", Ack(m, n));
return 0;
}
int Ack( int m, int n ){
if(m==0){
return n+1;
}else if(n==0&&m>0){
return Ack(m-1,1);
}else if(m>0&&n>0){
return Ack(m-1,Ack(m,n-1));
}
}
34
#include <stdio.h>
int f( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", f(n));
return 0;
}
int f( int n )
{
if(n==0||n==1)
return n;
else
return f(n-1)+f(n-2);
}
35
#include <stdio.h>
void dectobin( int n );
int main()
{
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
void dectobin(int n)
{
if (n / 2 > 0)
dectobin(n / 2);
printf("%d", n % 2);
}
36
#include <stdio.h>
void printdigits( int n );
int main()
{
int n;
scanf("%d", &n);
printdigits(n);
return 0;
}
void printdigits( int n )
{
int i,k;
i=n;k=1;
if(i<=9)printf("%d\n",i);
else
{
while(i>9)
{
i=i/10;
k*=10;
}
printf("%d\n",i);
printdigits(n-i*k);
}
}
37
#include <stdio.h>
char *getmonth( int n );
int main()
{
int n;
char *s;
scanf("%d", &n);
s = getmonth(n);
if ( s==NULL ) printf("wrong input!\n");
else printf("%s\n", s);
return 0;
}
char *getmonth( int n )
{
char *month[13] = {"January","February","March","April","May","June","July","August","September","October","November","December","wrong input!"};
char *s;
if(n>=1 && n<=12)
{
s = month[n-1];
}else
{
s = month[12];
}
return s;
}
38
#include <stdio.h>
#include <string.h>
#define MAXS 80
int getindex( char *s );
int main()
{
int n;
char s[MAXS];
scanf("%s", s);
n = getindex(s);
if ( n==-1 ) printf("wrong input!\n");
else printf("%d\n", n);
return 0;
}
int getindex(char *s)
{
int week;
char *day[7] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };
//这里使用 day[7][10] 也行 并且*day[7]在dev中有 警告??
for (week = 0; week <= 6; week++){
if (strcmp(s, day[week]) ==0) break;
}
if (week == 7) week = -1;
return week;
}
39
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 10
#define MAXS 20
int max_len( char *s[], int n );
int main()
{
int i, n;
char *string[MAXN] = {NULL};
scanf("%d", &n);
for(i = 0; i < n; i++) {
string[i] = (char *)malloc(sizeof(char)*MAXS);
scanf("%s", string[i]);
}
printf("%d\n", max_len(string, n));
return 0;
}
int max_len( char *s[], int n )
{
int max=0;//假设max为s[0]
int i;
for(i=0;i<n;i++)
{
if(strlen(s[max])<strlen(s[i]))
{
max=i;
}
}
return strlen(s[max]);
}
40
#include <stdio.h>
#include <string.h>
#define MAXS 10
char *str_cat( char *s, char *t );
int main()
{
char *p;
char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
scanf("%s%s", str1, str2);
p = str_cat(str1, str2);
printf("%s\n%s\n", p, str1);
return 0;
}
char *str_cat( char *s, char *t ){
s=strcat(s,t);
return s;
}
41
#include <stdio.h>
#define MAXS 10
char *match( char *s, char ch1, char ch2 );
int main()
{
char str[MAXS], ch_start, ch_end, *p;
scanf("%s\n", str);
scanf("%c %c", &ch_start, &ch_end);
p = match(str, ch_start, ch_end);
printf("%s\n", p);
return 0;
}
char *match( char *s, char ch1, char ch2 )
{
char a[MAXS]="",*p;//a字符数组是打印的ch1和ch2之间的字符,*p指针是返回ch1的地址
int i=0,j=0;
while((*(s+i)!=ch1)&&(*(s+i)!=0))//从第一个元素找起到ch1或字符串停止符'\0'停止
{
i++;
}p=s+i;//p指针指向找到ch1或'\0'后s字符串后面的部分
a[j]=*(s+i);//将ch1或'\0'给到a数组第一个元素------①
j++;i++;
while((*(s+i)!=0)&&(*(s+i)!=ch2))//找ch2或'\0'停止,期间复制中间字符给a数组
{
a[j]=*(s+i);
j++;i++;
}//---------②
a[j]=*(s+i);//最后加上ch2或'\0'
printf("%s\n",a);
return p;
}
42
#include <stdio.h>
#define MAXS 30
char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */
int main()
{
char s[MAXS], t[MAXS], *pos;
ReadString(s);
ReadString(t);
pos = search(s, t);
if ( pos != NULL )
printf("%d\n", pos - s);
else
printf("-1\n");
return 0;
}
#include <string.h>
char *search( char *s, char *t ) {
int i,j,n;
for(i=0; i<strlen(s); i++) {
if(s[i]==t[0]) {
n=i;//存储初始的地址
for(j=0; j<strlen(t);j++) {
if(s[i++]!=t[j])break;
}
if(j==strlen(t)){
return s+n;
}
}
}
return NULL;
}
43
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
struct ListNode *L, *Odd;
L = readlist();
Odd = getodd(&L);
printlist(Odd);
printlist(L);
return 0;
}
struct ListNode *readlist(){
struct ListNode *head=NULL,*p,*tail=NULL;
int data;
scanf("%d",&data);
while(data!=-1){
p=(struct ListNode*)malloc(sizeof(struct ListNode));
p->data=data;
if(head==NULL)head=p;
else tail->next=p;
tail=p;
scanf("%d",&data);
}
tail->next=NULL;
return head;
}
struct ListNode *getodd( struct ListNode **L ){
struct ListNode *p_check=*L,*ntail=NULL,*nhead=NULL,*otail=NULL;
*L=NULL;
while(p_check!=NULL){
if(p_check->data%2==0){
if(*L==NULL)*L=p_check;
else{
otail->next=p_check;
}
otail=p_check;
}
else{
if(nhead==NULL)nhead=p_check;
else{
ntail->next=p_check;
}
ntail=p_check;
}
p_check=p_check->next;
}
if(ntail!=NULL)ntail->next=NULL;
if(otail!=NULL)otail->next=NULL;
return nhead;
}
44
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int m;
struct ListNode *L = readlist();
scanf("%d", &m);
L = deletem(L, m);
printlist(L);
return 0;
}
struct ListNode *readlist(){
int data;
struct ListNode *pHead=NULL,*pEnd,*pNew; //新建链表,详细注释请看 习题11-7
while(scanf("%d",&data)&&data!=-1){
pNew=(struct ListNode *)malloc(sizeof(struct ListNode));
if(pNew != NULL){
pNew->data=data;
pNew->next=NULL;
}
if(pHead!=NULL){
pEnd->next=pNew;
}else{
pHead = pNew;
}
pEnd=pNew;
}
return pHead;
}
struct ListNode *deletem( struct ListNode *L, int m ){
struct ListNode *q,*p; //q为记录L-1位置的元素
p=L; //首地址
for(q=NULL;L;q=L,L = L->next){
if(L->data == m){ //找到需要删除的元素
if(q){ //如果q不等于空值,也就是当前不是第一位数
q->next=L->next;
}else{ //第一位数是需要删除的元素时
p = L->next; //首地址向后移一位
q=p;
}
free(L); //删除地址
L=q; //需要将L还原至删除前的那一位元素,否则for循环将跳过L的值
}
}
if(p){ //再次判断前面是否有两位连续需要删除的元素
if(p->data == m){
p = p->next; //找到后首地址向后移动
}
}
return p;
}