#include<stdio.h>
#include<stdlib.h>
int gn1(int m,int n);
int gn2(int n);
int gn3();
int main()
{
int t;
while(1){
printf("功能菜单·功能选调\n");
printf("1.功能(1)免费旅行\n");
printf("2.功能(2)回文数的形成\n");
printf("3.功能(3)奇异的三位数\n");
printf("0.退出程序\n");
printf("请输入选项序号:") ;
scanf("%d",&t) ;
if(t==0)break;
switch(t){
case 1:{
int m, n;
printf("请输入游客个数m和报数值n(请使用空格分隔): ");
scanf("%d%d", &m,&n);
printf("获得免费旅行服务的游客编号为:%d\n ",gn1(m,n));
break;
}
case 2:{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n <= 0) {
printf("输入有误!\n");
break;
}
printf("\n形成过程:\n");
printf("%d + %d = %d\n", gn2(n));
break;
}
case 3:{
int n=gn3();
printf("这个奇异的三位数是:%d\n",n);
break;
}
default:
printf("输入错误,请重新输入!\n");
break;
}
}
printf("程序已经退出!");
return 0;
}
int gn1(int m,int n){
if(m==1){
return 1;
}
else{
return (gn1(m-1,n)+n-1)%m+1;
}
}
int palindromic(int x)
{
int i=0;
while(x)
{
i=i*10+x%10;
x=x/10;
}
return i;
}
int judge(int x)
{
if(x==palindromic(x))
{
return 1;
}
else
{
return 0;
}
}
int gn2(int n){
int x2,key;
scanf("%d",&n);
if(!judge(x2))
{
printf("yes palindromic\n");
return 0;
}
while(1)
{
x2=palindromic(n);
key=judge(x2);
if(key==0)
{
n+=x2;
}
else
{
break;
}
}
return 0;
}
gn3(int n,int a,int b,int c){
for (n = 100; n <= 666; n++) {
a = n / 49;
b = (n % 49) / 7;
c = n % 7;
if (a == n % 9 && b == (n / 9) % 9 && c == n / 81){
return n;
}
}
return 0;
}
因为gn2已经传入一个n了,但你在函数里又输入一次
int gn2(int n){
int x2,key;
scanf("%d",&n);
至于输出问题,肯定是0+一列数字=一列数字吧
显然因为你一个gn2的int返回值,但前面有3个%d;没太看懂你这个代码在实现什么功能
printf("%d + %d = %d\n", gn2(n));
修改如下,功能2 回文数的形成里,要注意输入数值的范围,供参考:
#include<stdio.h>
#include<stdlib.h>
int gn1(int m, int n);
int gn2(int n);
int gn3();
int main()
{
int t;
while (1) {
printf("功能菜单·功能选调\n");
printf("1.功能(1)免费旅行\n");
printf("2.功能(2)回文数的形成\n");
printf("3.功能(3)奇异的三位数\n");
printf("0.退出程序\n");
printf("请输入选项序号:");
scanf("%d", &t);
if (t == 0)break;
switch (t) {
case 1: {
int m, n;
printf("请输入游客个数m和报数值n(请使用空格分隔): ");
scanf("%d%d", &m, &n);
printf("获得免费旅行服务的游客编号为:%d\n ", gn1(m, n));
break;
}
case 2: {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n <= 0) {
printf("输入有误!\n");
break;
}
printf("\n形成过程:\n");
gn2(n);
//printf("%d + %d = %d\n", gn2(n));
break;
}
case 3: {
int n = gn3();
printf("这个奇异的三位数是:%d\n", n);
break;
}
default:
printf("输入错误,请重新输入!\n");
break;
}
}
printf("程序已经退出!");
return 0;
}
int gn1(int m, int n) {
if (m == 1) //{
return 1;
//}
//else {
return (gn1(m - 1, n) + n - 1) % m + 1;
//}
}
int palindromic(int x)
{
int i = 0;
while (x)
{
i = i * 10 + x % 10;
x = x / 10;
}
return i;
}
int judge(int x)
{
if (x == palindromic(x))
{
return 1;
}
else
{
return 0;
}
}
int gn2(int n) {
int x2, key = 0;
//scanf("%d", &n); // 修改
while (!judge(n)) //if (!judge(x2)) 修改
{
x2 = palindromic(n);
printf(key ++ ? " = %d + %d" : "%d + %d", n, x2);
n += x2;
}
printf(key ? " = %d yes palindromic\n" : "%d yes palindromic\n ", n);
return 0;
}
int gn3() { //gn3(int n, int a, int b, int c) 修改 这个函数没有形参
int n, a, b, c; // 修改
for (n = 100; n <= 666; n++) {
a = n / 49;
b = (n % 49) / 7;
c = n % 7;
if (a == n % 9 && b == (n / 9) % 9 && c == n / 81) {
return n;
}
}
return 0;
}