首先感谢大家支持,我相信每个人都是为了学习而来,不断地挑战自己能力,不断地武装自己知识储备。为了方便大家找题库,我把这刷题网址分享出来,当然我自己也没有刷完。
牛客网入门:https://www.nowcoder.com/ta/beginner-programmers
PTA:https://pintia.cn/problem-sets/994805046380707840/problems/type/7
牛客网进阶刷题:https://www.nowcoder.com/activity/oj
力扣:https://leetcode-cn.com/
#include
int main()
{
int x;
while(~scanf("%d",&x))
{
for(int i=0;i
x就是正斜杠与反斜杠相交叉,当我们把它看成一个数组里面放的空格和*,在[i][i]时是*, 在[i][n-1-j]时也是*,所以我们在打印的时候,我们用if判断出该打印出的*其他就为空格,这里就有两种情况,i==j时和i=n-i-j时。
int main()
{
int c = 1;;
int n = 0;
scanf("%d", &n);
int d = 3 * n;
for (int i = 1; i <= n; i++)//树叶
{
for (int a = d -1;a>0;a--)
{
printf(" ");
}
for (int k = 1; k <= i; k++)
{
printf("* ");
}
printf("\n");
for (int a = d - 2; a > 0; a--)
{
printf(" ");
}
for (int k = 1; k <= i; k++)
{
printf("* * ");
}
printf("\n");
for (int a = d-3; a > 0; a--)
{
printf(" ");
}
for (int k = 1; k <= i; k++)
{
printf("* * * ");
}
printf("\n");
d = d - 3;
}
while (c<=n)//树干
{
for (int i = 1; i <= (6 * n - 1) / 2; i++)
{
printf(" ");
}
printf("*\n");
c++;
}
return 0;
}
注意:确定好最开始有多少个空格(d=3*n-1),确定好下一个三角形循环的第一个*的位置 (d=d-3);
#include
int main()
{
int n,x;
scanf("%d",&n);
int arr[255]={0};
for(int i=0;i=set;i--)//将set位置前面的值向前移,再将set数组值赋值到数组中
{
arr[i+1]=arr[i];
}
arr[set]=x;
for(int i=0;i<=n;i++)//打印数组
{
printf("%d ",arr[i]);
}
return 0;
}
#include
int main()
{
int a[50];
int n,x;
while(scanf("%d",&n)!=EOF)//多组输入
{
int i;
for(i=0;i
#include
int main()
{
int n;
scanf("%d",&n);
int arr1[255]={0};
int arr2[255]={0};
int k=0;
int flag=0;//定义开关,通过判断不相等时将arr1赋值到arr2
for(int i=0;i
#include
int main()
{
int n,i;
scanf("%d",&n);
int a[n][n];
int row=0,col=n-1;
int count=1;
while(count<=n*n)
{
for(i=row;i<=col;i++)
{
a[row][i]=count++; //控制第一行;
}
for(i=row+1;i<=col;i++)
{
a[i][col]=count++; //控制最右边一列;
}
for(i=col-1;i>=row;i--)
{
a[col][i]=count++; //控制最下面一行
}
for(i=col-1;i>row;i--) //控制最左边一列
{
a[i][row]=count++;
}
row++; //控制内部同上只不过行+,列-;
col--;
}
for(row=0;row
明确方向:主要有两个方向左和右,上(左上,左),下(右下,右)。我们通过1,-1来判断方向,这里定义的flag变量。
逻辑推理: 用i
代表行------------j
代表列
- 碰到上边界(即i等于1 且 j小于n): 列增加1,行不变--------往右移动一格
- 碰到左边界(即j等于1 且 i小于n): 行增加1,列不变--------往下移动一格
- 碰到右边界(即j等于n): 行增加1,列不变--------往下移动一格
- 碰到下边界(即i等于n): 列增加1,行不变--------往右移动一格
- 除去上面四种的边界情况,就是在边界中间的左下移动
- 除去上面四种的边界情况,就是在边界中间的右上移动
#include
int main()
{
int n;
scanf("%d",&n);
int i=1,j=1,pos=1; //pos代表方向移动 1代表右上 -1代表左下
int arr[100][100]={0};
arr[i][j]=1;
for(int k=2;k<=n*n;k++)
{
if (i == 1 && j
#include
int main()
{
char s[200]={0};
while(~scanf("%s==",s))//多次打印
{
if (s[0] >= 65 && s[0] <= 90) 如果大写就打印
{
printf("%c", s[0]);
}
else
printf("%c", s[0] - 32);如果小写就转成大写打印
}
return 0;
}
//dome1:
#include
int is_prime(int n)
{
int i = 0;
for(i = 2;i
int main()
{
int x,y;
scanf("%d %d",&x,&y);
int count=0;
int sum=0;
for(int i=x;i<=y;i++)
{
for(int j=1;j<=i;j++)
{
if(i%j==0)
{
count++;
}
}
if(count==2)
{
sum += i;
}
count=0;
}
printf("%d",sum);
return 0;
}
#include
#include
long long fun(long long t)//回文
{
int ret=t;
while(ret>9)
{
ret/=10;
t=(t*10+ret%10);
}
return t;
}
int isPrime(long long num)//判断素数
{
int temp=sqrt(num);
for(int i= 2;i <=temp; i++)
if(num %i== 0)
return 0 ;
return 1 ;
}
int main()
{
long long n;
scanf("%lld", &n);
if (isPrime(fun(n)))
{
printf("prime");
}
else
{
printf("noprime");
}
return 0;
}
#include
int n;
int arr[20] = {0}, arr_r[20] = {0};
char crr[10] = {0};
int lenght = 0;
void func_crr_to_arr()
{
for(lenght = 1; crr[lenght-1] != 0 ; lenght++)
{
if(crr[lenght-1] >= '0' && crr[lenght-1] <= '9') arr[lenght] = crr[lenght-1] - '0';
else if(crr[lenght-1] >= 'A' && crr[lenght-1] <= 'F') arr[lenght] = crr[lenght-1] - 'A' + 10;
}
lenght -= 1;
}
int func_arr_palindrome_judge()
{
for(int i = 1; i <= lenght ; i++)
{
if(arr[i] != arr[lenght - i + 1])
return 0;
}
return 1;
}
void func_get_arr_reserve()
{
for(int i = 1; i <= lenght ; i++)
{
arr_r[i] = arr[lenght - i + 1];
}
}
void func_arr_reset()
{
for(int i = lenght; i > 0; i--)
{
if((arr[i] + arr_r[i]) / n != 0 )
{
arr[i - 1] ++;
arr[i] = arr[i] + arr_r[i] - n;
}
else
{
arr[i] = arr[i] + arr_r[i];
}
}
if(arr[0] != 0)
{
for(int i = lenght; i >= 0; i--)
{
arr[i + 1] = arr[i];
}
arr[0] = 0;
lenght ++;
}
}
int main()
{
int step = 0;
scanf("%d", &n);
scanf("%s", &crr);
func_crr_to_arr();
while(!func_arr_palindrome_judge())
{
func_get_arr_reserve();
func_arr_reset();
step ++;
if(step >= 30)break;
}
if(step >= 30)printf("Impossible!");
else printf("STEP=%d", step);
return 0;
}
规律:n=1 --> 3-1,n==2 -->3*3-1 ,n==3 -->3*3-1,n==4-->3*3*3-1
int main()
{
int n;
while (~scanf("%d", &n))
{
int a = 1;
for (int i = 1; i <= n; i++)
{
a *= 3;
}
printf("%d\n", a - 1);
}
return 0;
}
//记住判断素数%2==0就OK了
#include
int main()
{
int n,a;
scanf("%d",&n);
for(int i=0;i
规律:0、1、1、2、3、5、8、13、21、34、……
#include
int fib(int x)
{
if(x<=2)
return x;
else
return fib(x-1)+fib(x-2);
}
//列如5
//5->4 3->3 2 1 2->1 2 2 1 2
//结果1+2+2+1+2 =8
int main()
{
int n;
scanf("%d",&n);
int ret=fib(n);
printf("%d",ret);
return 0;
}
#include
long long factorial(int n)
{
if(n<=2)
return n;
else
return n*factorial(n-1);
}
int main()
{
int n;
scanf("%d",&n);
long long ret=factorial(n);
printf("%lld",ret);
return 0;
}
#include
int A(int n,int m)
{
if(m==1)
return n;
else
return n*A(n-1,m-1);
}
//列如5 4
//5-1,4-1 -> 4-1,3-1 -> 3-1,2-1
//4,3 -> 3,2 -> 2,1 return n;
//n=2,3,4 return n*2*3*4
//结果:5*4*3*2=120
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int ret=A(n,m);
printf("%d",ret);
return 0;
}
void reverse(int a)
{
if(a>0)
{
printf("%d",a%10);
reverse(a/10);
}
}
main()
{
int a=0;
scanf("%d",&a);
reverse(a);
}
最后希望大家学有所成!!!!