已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中
输入
第一行,原始数列。 第二行,需要插入的数字。
输出
排序后的数列
样例输入
1 7 8 17 23 24 59 62 101
50
样例输出
1
7
8
17
23
24
50
59
62
101
#include"stdio.h"
int main()
{
int a[10],i,j,number,size;
for(i=0;i<9;i++) //键入
{
scanf("%d",&a[i]);
}
scanf("%d",&number);
for(i=0;i<10;i++) //循环查找插入点
{
if(number<=a[i])
{
size=i;break; //找到插入点后就跳=出循环
}
}
for(j=9;j>size;j--) //后移
{
a[j]=a[j-1];
}
a[i]=number;
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
输入10个数倒序输出
#include <stdio.h>
int main()
{
int i,a[10],*p;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
p=&a[9];
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
printf("\n");
for(i=9;i>=0;i--)
{
printf("%d",*p);
p--;
}
}
给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123
#include <stdio.h>
int main()
{
int number,b,c=0,i=0,a[5];
scanf("%d",&number);
while(number>0)
{
c++;
a[i]=number%10;
i++;
number/=10;
}
printf("%d\n",c);
for(i=c-1;i>=1;i--)
printf("%d ",a[i]);
printf("%d\n",a[0]);
}
编写一个程序,输入a、b、c三个值,输出其中最大值。
#include<stdio.h>
int main()
{
int a,b,c;
printf("Input three numbers:");
scanf("%d %d %d", &a, &b,&c);
printf("max=%d\n", (a>b?a:b)>c?(a>b?a:b):c);
return 0;
}
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
#include<stdio.h>
int main(void)
{
char ch;
int character=0,number=0,blank=0,other=0;
while((ch=getchar())!='\n')//循环读取一个字符,直到读取到'\n'结束('\n'也就是回车)
{
if(ch>='A' && ch<='Z' || ch>='a' && ch<='z')
{
character++;
}
else if(ch>='0' && ch<='9')
{
number ++;
}
else if(ch==' ')
{
blank++;
}
else
{
other ++;
}
}
printf("%d %d %d %d\n",character,number,blank,other);
return 0;
}
求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。
#include <stdio.h>
int main()
{
int i,a=2,b,sum1=0,sum=0;
scanf("%d",&b);
for(i=1;i<=b;i++)
{
sum1=sum1*10+a;
sum=sum+sum1;
}
printf("%d",sum);
}
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
#include <stdio.h>
int main()
{
int n,i=1,a=1,sn=0;
scanf("%d",&n);
while(i<=n)
{
a*=i;
sn=sn+a;
i++;
}
printf("%d",a);
return 0;
}
以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和
#include <stdio.h>
int main()
{
int i=1.0,a,b,c,sum1=0,sum2=0;
double sum,sum3=0;
scanf("%d %d %d",&a,&b,&c);
for(i=1;i<=a;i++)
{
sum1+=i;
}
printf("%d\n",sum1);
for(i=1;i<=b;i++)
{
sum2+=i*i;
}
printf("%d\n",sum2);
for(i=1;i<=c;i++)
{
sum3+=1.0/i;
}
printf("%lf\n",sum3);
sum=sum1+sum2+sum3;
printf("%lf",sum);
return 0;
}
一个数如果恰好等于不包含它本身所有因子之和,这个数就称为”完数”。 例如,6的因子为1、2、3,而6=1+2+3,因此6是”完数”。 编程序找出N之内的所有完数,并按下面格式输出其因子
#include <stdio.h>
int main ()
{
int a=2,i=1,n,sum=0;
scanf("%d",&n);
for(a=2;a<n;a++)
{
sum=0;
for(i=1;i<a;i++)
{
if(a%i==0)
sum+=i;
}
if(sum==a)
{ printf("%d its factors ",a);
for(i=1;i<a;i++)
{if(a%i==0)
printf("%d ",i);
}printf("\n");}
}
}
一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数
#include <stdio.h>
int main()
{
double m,n,i,a=0,b,b1=0;
scanf("%lf %lf" ,&m,&n);
for(i=1;i<=n;i++)
{
b=m;
m=m/2;
a+=b+b1;
b1=m;
}
printf("%.2lf %.2lf",m,a);
}
/*公式:求a的平方根的迭代公式为:?X[n+1]=(X[n]+a/X[n])/2?要求前后两次求出的差的绝对值少于0.00001。输出保留3位小数*/
#include <stdio.h>
#include <math.h>
int main()
{
double x,y=0,a;
scanf("%lf",&a);
x=a;
while(fabs(x-y)>=0.00001)
{
y=x;
x=(x+a/x)/2;
}
printf("%lf",x);
return 0;
}
/*用简单素数筛选法求N以内的素数*/
#include <stdio.h>
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=2;i<=n;i++)
{ int swich=0;
for(j=i-1;j>1;j--)
{
if(i%j==0)
{swich=1;
break;
}
}
if(swich==0)
printf("%d\n",i);
}
}
/*冒泡排序*/
#include <stdio.h>
int main()
{
int a[10];
int i,j,temp,k;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<9;j++)
{
for(k=0;k<9-j;k++)
{
if(a[k]>a[k+1])
{
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
}
}
for(i=0;i<=9;i++)
printf("%d ",a[i]);
return 0;
}
/*
* 冒泡排序优化一
* 设置一个标记来标志一趟比较是否发生交换
* 如果没有发生交换,则数组已经有序
* */
void bubbleSort1(int arr[], int n) {
int i = 0;
int j = 0;
int tmp = 0;
int flag = 0;
for (i = 0; i < n; ++i) {
flag = 0;
for (j = 0; j < n - 1 - i; ++j) {
if (arr[j] < arr[j + 1]) {
flag = 1;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
if (flag == 0) {
break;
}
}
}
/*
* 冒泡排序优化二
* 用一个变量记录下最后一个发生交换的位置,后面没有发生交换的已经有序
* 所以可以用这个值来作为下一次比较结束的位置
* */
void bubbleSort2(int arr[], int n) {
int i = 0;
int j = 0;
int k = 0;
int tmp = 0;
int flag = n;
for (i = 0; i < flag; ++i) {
k = flag;
flag = 0;
for (j = 0; j < k; ++j) {
if (arr[j] < arr[j + 1]) {
flag = j;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
/*求一个3×3矩阵对角线元素之和。 */
#include<stdio.h>
int main()
{
int a[3][3]={1,2,3,1,1,1,3,2,1};
int i,j,c=0,d=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(i==j)
c=c+a[i][j];
if(i+j==2)
d=d+a[i][j];
}
}
printf("%d %d\n",c,d);
}
/*已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。*/
#include <stdio.h>
int main()
{
int i,j,k,a[20];
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&k);
for(j=0;j<10;j++)
{
if(a[j]>=k)
{
break;
}
}
for(i=9;i>j;i--)
{
a[i]=a[i-1];
}
a[j]=k;
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
#include <stdio.h>
int hehe(int a,int b);
int haha(int a,int b);
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d",hehe(a,b),haha(a,b));
return 0;
}
int hehe(int a,int b)
{
if(b==0)
return a;
return hehe(b,a%b);
}
int haha(int a,int b)
{
return a*b/hehe(a,b);
}
输出1-100的素数
#include <stdio.h>
int main()
{
int i, n, t = 0;
for (n=1; n<=100; ++n)
{
for(i=2; i<=n; ++i)
{
if(n%i == 0)
break;
}
if (n == i)
{
printf("%d ", n);
}
}
}
写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。
#include <stdio.h>
#include <string.h>
int box(char a[20],char b[20])
{
int i,j,k;
j=strlen(a);
k=j-1;
i=0;
while(i<j)
{
b[k]=a[i];
i++;
k--;
}
return 0;
}
int main()
{
int i,j;
char c[20],d[20];
gets(c);
j=strlen(c);
box(c,d);
for(i=0;i<j;i++)
{
printf("%c",d[i]);
}
return 0;
}
写一函数,将两个字符串连接
#include <stdio.h>
#include <string.h>
int main()
{
char a[100],b[100];
gets(a);
gets(b);
strcat(a,b);
printf("%s",a);
return 0;
}
判断素数
#include"stdio.h"
int prime(int a)
{ //判断素数
int b,i;
if (a > 2 && (a % 2 )!= 0)
{
for (b = 0, i = 2; i < a; i++)
{
if (a%i == 0)
{
b++;
break;
}
}
return b;
}
else if (a == 2)
return 0;
else return 1;
}
int main()
{
int a;
scanf("%d", &a);
if (prime(a) > 0)
printf("0");
else printf("1");
return 0;
}
一个人爬楼梯,楼梯共20层,一人一步可以走一层或两层,共多少种走法?
#include <stdio.h>
int getUpstailTypes(int n)
{
if(n==1||n==2)
return n;
return getUpstailTypes(n-1)+getUpstailTypes(n-2);
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n", getUpstailTypes(n));
return 0;
}
逆序输出数的几种算法
//利用函数递归方法来实现
//代码如下:
# include "stdio.h"
void f(long k) //定义了递归函数
{
printf("%ld", k%10);
k = k/10;
if (k>0)
f(k) ; //重点:用到了递归
}
int main(void)
{
long n; //定义了一个long型
printf("输入任意正整数 : ");
scanf("%ld", &n);
f(n); //调用函数f
printf("\n");
return 0;
}
//用指针+函数+字符数组方法实现
//代码如下:
#include "stdio.h"
#include "string.h"
void f(char* arr) //定义函数f();
{ int i;
int len = strlen(arr); //计算arr数组的有效长度
char* p=&arr[len-1]; //定义了一个char类型的指针并指向最后一个字符的地址
for( i=0;i<len;i++)
{
printf("%c",*p--); //实现用指针方法输出
}
p=NULL; //指针为空
}
int main(void)
{ char a[30];
printf("输入任意正整数:");
gets(a);
f(a); //调用函数f(a);
return 0;
}
//数学纯计算方法加循环
//代码如下:
#include <stdio.h>
int main(void)
{
long num;
printf("请输入任意正整数:");
scanf("%d",&num);
while (num > 0) //num大于0就不停循环
{
printf("%d",num%10); //num%10 ,输出个位
num /= 10; //除以10
}
return 0;
}
//编程思路: 利用字符数组
//代码如下:
#include "stdio.h"
#include "string.h"
int main(void)
{ int a,i;
char f[30]; //大小由程序需要定义
printf("输入任意整数:");
gets(f); //字符串输入函数
a=strlen(f); //strlen();函数为计算数组实际长度,不包括*\0*
puts("倒序输出为:");
for(i=a;i>=0;i--) //循环从数组末尾(*\0*前面)开始输出
printf("%c",f[i]);
return 0;
}
#include <stdio.h>
int reverse_num(int n)
{
int m = n%10;
int i = n/10;
while (i > 0)
{
int a = i%10;
m *= 10;
m += a;
i /= 10;
}
return m;
}
int main()
{
int n = 0;
int m = 0;
printf("Please input a number:\n");
scanf("%d", &n);
printf("The reverse number is : %d\n",reverse_num(n));
return 0;
}
用C编写程序:输入两个正整数m和n(m>=1,n<=10000),输出m~n之间所有的Fibonacci数。
#include <stdio.h>
int fib(int n)
{
int a=1,b=0,i,t;
for(i=1;i<n;i++)
{
t=a;
a=a+b;
b=t;
}
return a;
}
int main()
{
int n,s,a,i;
scanf("%d %d",&s,&n);
for(i=1;i<=n;i++)
{
a=fib(i);
if(a>=s&&a<=n)
printf("%d ",a);
}
}
将一个字符串逆序输出
#include <stdio.h>
#include <string.h>
int main()
{
int l,i,j;
char str[100],t;
gets(str);
l=strlen(str)-1;
for(i=0,j=l;i<=j;i++,j--)
{
t=str[i];
str[i]=str[j];
str[j]=t;
}
printf("%s",str);
}
在一个输入的三行两列的的数组中计算各行的和
#include <stdio.h>
int main()
{
int a[3][2],b[100],i,k,j;
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0,k=0;i<3,k<3;i++,k++)
{
int j=0;
b[k]=a[i][j]+a[i][j+1];
printf("sum of row %d is %d\n",i+1,b[k]);
}
}
编写子函数int Found(int *p,int n,int key);在一个含n个.首地址为a的递减整数序列中运用折半查找法返回查找结果;
#include <stdio.h>
int Found(int *p,int n,int key);
int Found(int *p,int n,int key)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(key<*(p+mid))
low=mid+1;
else if(key>*(p+mid))
high=mid-1;
else
return mid+1;
}
return -1;
}
int main()
{
int *p,i,b,s[100],key;
scanf("%d",&b);
for(i=0;i<b;i++)
{
scanf("%d",&s[i]);
}
scanf("%d",&key);
printf("%d",Found(s,b,key));
}
#include <stdio.h>
int main()
{
int array[10];
int *p=array,i=0,sum=0;
for(i=0;i<10;i++)
scanf("%d",&array[i]);
for(i=0;i<10;i++)
{
sum+=*(p+i);
}
printf("%d",sum);
}
#include <stdio.h>
int max(int a,int b)
{
return a>b?a:b;
}
int (*larger)(int ,int);
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
larger=max;
c=(*larger)(a,b);
printf("%d",c);
return 0;
}
#include<stdio.h>
void main()
{ int a[5],max,min,i;
for ( i=0;i<5;i++ ) scanf("%d",&a[i]);
max=min=0;
for ( i=1;i<5;i++ ) if ( a[max]<a[i] ) max=i; else if ( a[min]>a[i] ) min=i;
if ( min!=0 ) { i=a[0]; a[0]=a[min]; a[min]=i; }
if ( max!=4 ) { i=a[4]; a[4]=a[max]; a[max]=i; }
for ( i=0;i<5;i++ ) printf("%d ",a[i]); printf("\n");
}
#include<stdio.h>
void main()
{int a,b,day;
printf(" 请输入一个年份和月份:\n");
scanf("%d,%d",&a,&b);
switch(b)
{
case 1: day=31;break;
case 2: day=28;break;
case 3: day=31;break;
case 4: day=30;break;
case 5: day=31;break;
case 6: day=30;break;
case 7: day=31;break;
case 8: day=31;break;
case 9: day=30;break;
case 10: day=31;break;
case 11: day=30;break;
case 12: day=31;break;
}
if((a%4==0&&a%100!=0||a%400==0)&&b==2) day=29;
printf("该月份有%d天\n",day);
}
一个数加上100是完全平方数,再加上168也是完全平方数输出这个数。
#include <stdio.h>
#include <math.h>
int main()
{
double i,a,b;
for(i=1.0;i<100000;i++)
{
a=sqrt(i+100);
b=sqrt(i+100+168);
while(a==(int)a&&b==(int)b)
{
printf("%lf\n",i);
break;
}
}
}
计算:sum=1-1/2!+1/3!-1/4!+ …… -1/n!
#include<stdio.h>
void main()
{
double sum=0.0,i,t=1;
int s=1,n;
scanf("%d",&n);
for(i=1.0;i<=n;i++)
{
t*=i;
sum+=s/t;
s=-s;
}
printf("%.2f",sum);
}
求最小公倍数
#include <stdio.h>
int func(int m, int n);
int main()
{
int m,n,a;
scanf("%d %d",&m,&n);
a=func(m,n);
printf("%d",a);
}
int func(int m, int n)
{
int t,i = n, j = m;
while ((m%n)!=0)
{
t = n;
n = m % n;
m = t;
}
return i*j/n;
}
用静态变量求阶乘
#include<stdio.h>
int fun(int n)
{
static int f=1;
f=f*n;
return f;
}
void main()
{
int i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("%d\n",fun(i));
}
折半法
#include <stdio.h>
int main()
{
int i; //循环变量
int num; //待查找的数
int find = 0; //查找标记。 0:未找到,1:找到
int low=0, high=7, mid; //折半查找用的变量,low代表下标下界, high代表下标上界, mid为下标中间值
int count = 0; //统计查找次数
int a[8]; //数组a用来存放输入的8个整数
//输入8个有序整数到数组a
for (i = 0; i < 8; i++)
scanf("%d", &a[i]);
scanf("%d", &num); //输入待查找的数
while(low<=high)
{
mid=(high+low)/2;
if(num>a[mid])
{
low=mid+1;
count++;
}
else if(num<a[mid])
{
high=mid-1;
count++;
}
else
{
find=1;
break;
}
}
if(find == 1) printf("查找到,查找次数:%d次", count);
else printf("无此数");
return 0;
}
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数
#include <stdio.h>
int main()
{
void move(int [20],int,int);
int number[20],n=5,m=3,i;
//printf("how many numbers?");
//scanf("%d",&n);
//printf("input %d numbers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&number[i]);
//printf("how many place you want move?");
//scanf("%d",&m);
move(number,n,m);
//printf("Now,they are:\n");
for(i=0;i<n;i++)
printf("%d ",number[i]);
printf("\n");
return 0;
}
void move(int array[20],int n,int m)
{
int *p,array_end;
array_end=*(array+n-1);
for(p=array+n-1;p>array;p--)
*p=*(p-1);
*array=array_end;
m--;
if(m>0)
move(array,n,m);
}
定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
#include<stdio.h>
leapyear(int a)//判断是否为闰年
{ int b;
if((a%4==0&&a%100!=0)||(a%400==0))
b=1;
else
b=0;
return b;
}
struct time//结构体 输入年 月 日
{int year;
int month;
int day;
}
main()
{
struct time a;
int b,d,i,j=0;
int c[12]={31,28,31,30,31,30,31,31,30,31,30,30};//对12个月赋值
scanf("%d%d%d",&a.year,&a.month,&a.day);
b=leapyear(a.year);//如果为闰年
if(b==1)
{c[1]=29;//二月当然变成29天了=A=
b=0;//跳出if
}
for(i=0;i<a.month-1;i++)//计算出是今年的第多少天
{
j=j+c[i];
}
printf("%d",j+a.day);//输出
}
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
#include<stdio.h>
main()
{
int i,a[100],j,k=0;//定义人员数量
int quit=0;//退出人数
scanf("%d",&i);//参与人数
for(j=0;j<=i;j++)//给成员编号
{
a[j]=j;
}
j=0;
while(quit<i-1)//剩最后一个人时退出
{
if(a[j]!=0)k++;//过滤退出的玩家,剩下的玩家喊口号
if(k==3){a[j]=0,quit++;k=0;}//当有玩家喊道3时退出
j++;//下一个人
if(j==i)j=0;//检测一圈是否结束
}
for(j=0;j<i;j++)//筛选出在场的玩家
{
if(a[j]!=0){printf("%d",a[j]);}
}
}
给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y)
#include<stdio.h>
#define LEAP_YEAR(y) ((y%4==0&&y%100!=0)||y%400==0)
int main()
{
int z,x;
scanf("%d",&z);
x=LEAP_YEAR(z);
if(x==1)
printf("L");
else
printf("N");
return 0;
}
数圈
#include<stdio.h>
main()
{
int n;
int array[20000];
int a=0,b,c;
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
array[i]=i;
c=n;
b=0;
do
{
for (i=1,j=0;i<=n;i++)
{
if(array[i]%3==0&&array[i]!=0)
{array[i]=0;j++;}
else if(array[i]==0);
else
array[i]=array[i]+c-j;
}
b=c/3;
c=c-j;
a=a+c;
}while(b);
for (i=1,j=0;i<=n;i++)
{
if(array[i]%3==0&&array[i]!=0)
{array[i]=0;j++;}
else if(array[i]==0);
else
array[i]=array[i]+c-j;
}
for(i=1;i<=n;i++)
{
if(array[i]!=0) printf("%d!\n",i);
}
getchar();
getchar();
}
#include "stdio.h"
#include "math.h"
int factorial(int n);
int main(void)
{
int i, n, rs;
printf("请输入斐波那契数n:");
scanf("%d",&n);
rs = factorial(n);
printf("%d \n", rs);
return 0;
}
// 递归
int factorial(int n)
{
if(n <= 2)
{
return 1;
}
else
{
return factorial(n-1) + factorial(n-2);
}
}
#include <stdio.h>
int main()
{
int a[200]={0},i=0,j=0,out=0,call=0,n;
scanf("%d",&n);
while(1)
{
if(a[i]==0)
{
if(out==(n-1))
break;
call++;
call%=3;
if(call==0)
{
a[i]=1;
out++;
}
}
i++;
i%=n;
}
printf("%d",i+1);
}
选择排序
#include <stdio.h>
void select_sort(int*a,int n)
{
register int i,j,min,t;
for(i=0;i<n-1;i++)
{
min=i;//查找最小值
for(j=i+1;j<n;j++)
if(a[min]>a[j])
min=j;//交换
if(min!=i)
{
t=a[min];
a[min]=a[i];
a[i]=t;
}
}
}
int main()
{
int a[10]={56,2,34,88,45,54,44,23,36,98},i;
select_sort(a,10);
for(i=0;i<10;i++)
printf("%d",a[i]);
}
【例】任意输入n个数,找出其中最大数,并且输出最大数值。
main()
{
int f();
int i,a,b;
int (*p)(); /* 定义函数指针 */
scanf("%d",&a);
p=f; /* 给函数指针p赋值,使它指向函数f */
for(i=1;i<9;i++)
{
scanf("%d",&b);
a=(*p)(a,b); /* 通过指针p调用函数f */
}
printf("The Max Number is:%d",a)
}
f(int x,int y)
{
int z;
z=(x>y)?x:y;
return(z);
}
将8进制转换为10进制
#include <stdio.h>
int main()
{
int a,b;
scanf("%d",&a);
b=a/10*8+a%10;
printf("%d",b);
}
数组旋转90度
#include"stdio.h"
int main()
{int i,j,n,t,a[20][20];
int c;
scanf("%d",&n);
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{a[i][j]=n*i+j+1;
printf("%3d",a[i][j]);
}
printf("\n");
}
printf("After:\n");
for(i=0;i<n-1;i++)
for(j=i;j<n-1-i;j++)
{t=a[i][j];
a[i][j]=a[n-1-j][i];
a[n-1-j][i]=a[n-1-i][n-1-j];
a[n-1-i][n-1-j]=a[j][n-1-i];
a[j][n-1-i]=t;
}
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}
在原字符串上修改"abcdef"循环左移9位(3位)前三位逆序,后三位逆序,整体再逆序。"cbafed"->"defabc"
string LeftRotateString(string str,int n){
int len=strlen(str);
if(len<=0)
return 0;
n=n%len;
if(n=0)
return str;
reverseStr(str,0,n-1);
reverseStr(str,n,len-1);
reverseStr(str,0,len-1);
return str;
}
void reverseStr(string &str,int left,int right)
{
for(int i=left,r=right;i<=left+(right-left)/2;++i){
swap(str[i],str[r--]);
}
}