社区
C#
帖子详情
求一简单算法,从A到ZZ...
cdo
2005-08-03 09:29:44
就像excel中的列标记一样,先从A开始,到Z,然后接下来是AA,AB...ZZ,AAA...ZZZ这样一直下去.
现在我有string s,想让s这样增加下去,求一算法.谢谢!
...全文
234
12
打赏
收藏
求一简单算法,从A到ZZ...
就像excel中的列标记一样,先从A开始,到Z,然后接下来是AA,AB...ZZ,AAA...ZZZ这样一直下去. 现在我有string s,想让s这样增加下去,求一算法.谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ThinPig
2005-08-04
打赏
举报
回复
这样效率最高。
public string ShowString()
{
StringBuilder Temp=new StringBuilder(160);
try
{
for (int k=0;k<4;k++)
{
for (int i=(int)'a';i<=(int)'z';i++)
{
for (int j=0;j<k;j++)
{
Temp.Append((char)i);
}
}
}
return Temp.ToString();
}
catch (Exception e)
{
throw new ExternalException(e.Message);
}
}
ThinPig
2005-08-04
打赏
举报
回复
刚才发的有不对,生成的是 A..Z,AA,BB,CC...ZZ,AAA,BBB,CCC....ZZZ
我想楼主的意思是:A..Z,AA,AB,AC,AD...ZZ,AAA,AAB,AAC...AAZ,ABA,ABB,ABC,ABD..ABZ...ZZZ 吧。如果不需要太多的灵活性这样写就可以了,简单效率又高。
public static string ShowString()
{
StringBuilder Temp = new StringBuilder(18278);
try
{
for (int k = 0; k < 4; k++)
{
for (int i = (int) 'a'; (i <= (int) 'z') && (k >= 0); i++)
{
if (k.Equals(0)) Temp.Append((char) i);
for (int l = (int) 'a'; l <= (int) 'z' && (k >= 1); l++)
{
if (k.Equals(1))
{
Temp.Append((char) i);
Temp.Append((char) l);
}
for (int j = (int) 'a'; j <= (int) 'z' && (k >= 2); j++)
{
if(k.Equals(2))
{
Temp.Append((char) i);
Temp.Append((char) l);
Temp.Append((char) j);
}
}
}
}
}
return Temp.ToString();
}
catch (Exception e)
{
throw new ExternalException(e.Message);
}
}
落伍者
2005-08-03
打赏
举报
回复
sqfeiyu(流星雨)的想法不错。有意思
quicklight
2005-08-03
打赏
举报
回复
so easy a:
private string GetCode(string prev)
{
if(prev == null || prev == "")
return "A";
char last = prev[prev.Length - 1];
if(last < 'Z')
prev = prev.Substring(0, prev.Length - 1) + (char)(last + 1);
else
{
prev = prev.Substring(0, prev.Length - 1) + "AA";
}
return prev;
}
shrinerain
2005-08-03
打赏
举报
回复
不是很明白楼主的意思,如果是构造a,b...z;aa,bb..zz;aaa,bbb..zzz;这种字符串的话见下面
int strLength=3;
for(int i=0;i<strLength;i++)
{
for(int myChar=65;myChar<=90;myChar++)
{
string originStr=null;
for(int m=0;m<=i;m++)
originStr+=(char)myChar;
Console.WriteLine(originStr);
}
}
sqfeiyu
2005-08-03
打赏
举报
回复
提供一個思路參考一下:
class NumStr:
{
private int num;
private string str;
public NumStr()
{
num=1;
str="A";
}
public string STR
{
get{return str;}
set
{
str=val;
StrToNum();
}
}
public string add(int i)
{
num +=1;
if(num%26==0) num+=1;
NumToStr();
return str;
}
private void StrToNum()
{
int n=str.length;
num=0;
for(int i=0;i<n;i++)
{
num += ((int)str[i]-64)*(int)System.Math.Pow(26,(n-i-1))
}
}
private void NumToStr()
{
int n=1;
int m=num;
str=""
while(n<m)
{
int t=m/26;
int y=m%26;
str= (char)(y+65) + str;
if(y==0)
m =m-26;
else
m=t*26;
}
}
}
abiho
2005-08-03
打赏
举报
回复
int count=0;
private void Begin()
{
int len=3;
Console.WriteLine(string.Format("开始,字符长度为{0},时间{1}\r\n",
len,DateTime.Now.ToString("HH:mm:ss.fffffff")));
byte[] result=new byte[len];
for(int i=0;i<len;i++)
{
result[i]=0x40;
}
while(true)
{
this.NextResult(result,len);
if(result[0]<0x5B)
{
this.PrintResult(result);
}
else
{
break;
}
}
Console.WriteLine(string.Format("结束时间:{0}\r\n",
DateTime.Now.ToString("HH:mm:ss.fffffff")));
}
private void PrintResult(byte[] result)
{
int i=0;
for(;result[i]<0x41;i++);
string str=System.Text.Encoding.ASCII.GetString(result,i,result.Length-i);
Console.Write(str+" ");
if(count>=25)
{
Console.Write("\r\n");
count=0;
}
else
count++;
Application.DoEvents();
}
private void NextResult(byte[] result,int len)
{
this.BytePlusOnce(result,len-1);
}
private void BytePlusOnce(byte[] result,int i)
{
if(i>0)
{
if(result[i]<0x5A)
{
result[i]++;
}
else
{
result[i]=0x41;
BytePlusOnce(result,i-1);
}
}
else
{
result[i]++;
}
}
cdo
2005-08-03
打赏
举报
回复
thx
sequelbo
2005-08-03
打赏
举报
回复
private string GetCode(string Father,string End)
{
if(Father==End)
{
return Father+"_"+"A";
}
string []Abc=new string[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
string Ez=End.Remove(0,End.Length-1);
if(Ez=="Z")
{
return End.Remove(End.Length-1,1)+"AA";
}
else
{
for(int i=0;i<Abc.Length;i++)
{
if(Ez==Abc[i])
{
return End.Remove(End.Length-1,1)+Abc[i+1];
}
}
}
return "";
}
类似!
cdo
2005-08-03
打赏
举报
回复
怎么没人进来看看呀.
wingnal
2005-08-03
打赏
举报
回复
很简单的一个函数,写一下不就完了,自己动手阿,呵呵
cdo
2005-08-03
打赏
举报
回复
thx
6.0.7 约分最简分式、念数字以及求a的连续和
这个程序主要涉及到我们之前学过的正序分解整数,想要实现这个程序,我们要在原有的基础上再做到两点:第一,处理该整数为负数的情况;
基于Unity的A星寻路
算法
(绝对
简单
完整版本)
前言 在上一篇文章,介绍了网格地图的实现方式,基于该文章,我们来实现一个A星寻路的
算法
,最终实现的效果为: 项目源码已上传Github:AStarNavigate 在阅读本篇文章,如果你对于里面提到的一些关于网格地图的创建方式的一些地图不了解的话,可以先阅读了解一下下面的这篇文章: 文章链接: Unity 制作一个网格地图生成组件 1、
简单
做一些背景介绍 在介绍A星寻路
算法
前,先介绍另外一种
算法
:Dijkstra寻路
算法
,
简单
的来说是一种A星寻路的基础版。Dijkstra作为一种无启发的寻路
算法
,
递归
算法
求a的n次方
递归
算法
求a的n次方 释义:自己直接或者间接调用自己 案例:递归求a的n次方 首先需要考虑a为0,1的情况,底数为0结果为一;底数为1结果为1;所以用判断语句写出这种特殊情况。递归的部分我们选择让他a*an-1就可以了。同时注意结束条件。采用c语言代码如下: //递归求a的n次方 #include<stdio.h> int cifang(int n,int k) { if(k==0) return 1; else if(k==1) return n; else retur
C语言
简单
算法
之A乘以B,求整数平均值,是不是胖了,输出各位数字
【1】题目一:A乘以B 1.实验代码 include<stdio.h> int main() { int A,B; scanf("%d %d",&A,&B); printf("%d\n",A*B); return 0; } 2.设计思路 第一步:打框架 第二步:初始化赋值a,b 第三步:输入变量a,b的值 3.<1>遇到的困难 开始没明白什...
求补码的简便
算法
对计算机来说,「对负数求最小正同余数(模为值位的容量)放入值位,符号位置为1」1 这样的求补码过程还是有些繁琐,同时这是一个非常基础的运算过程,一点点优化都能对计算机的计算效率有很大提升。于是就有大牛把这个过程优化成「值位取反加一
算法
」2:原码的符号位不变,其余值位取反,最后加1,得到负数的补码。这个
算法
在计算上变得非常便捷,极大地提高了计算效率。其实我们也可以在理解补码本质的基础上使用这个优化
算法
C#
111,131
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章